„Programista” to nowy projekt pisma skierowanego do zawodowych developerów, członków zespołów i specjalistów IT. Przygotowania do jego powstania trwały wiele miesięcy jednak, autorzy liczą na to że nowy magazyn zyska uznanie środowiska. Pierwszy numer można pobrać zupełnie za darmo!
Co znajdziecie w premierowym wydaniu?
- C++11 w praktyce: Sygnały i sloty
- Wyrażenia regularne w C++: Biblioteka boost::regex i boost::xpressive
- Analiza obrazu: Rozpoznawanie obiektów
- Arduino: Pierwszy kontakt
- Technologie Flash/Flex: Wprowadzenie do AMFPHP
- Domain Driven Design: Podstawowe Building Blocks DDD
- RUP: Praktyczne wykorzystanie RUP na stanowisku pracy Analityka Biznesowego
- Ewolucyjna architektura: Jak zorganizować proces rozwoju architektury?
Zapraszam do lektury!



Oby godnie zastąpił software developers/software 2.0.
Ciekawe po ile beda nastepne numery.
Liczę również na to, że redakcja zgodnie z obietnicą weźmie pod uwagę moją dłuższą sugestię zachęcającą do publikowania na Creative Commons i przynajmniej część treści dostępna będzie na jej zasadach. (;
Mielibyśmy spory sukces i wart wiele uwagi projekt, który mógłby się świetnie rozwijać.
Ja liczę, że następna wersja będzie również na Kindle 😉
Jeżeli kolejne numery mają być płatne, to na CC tylko stracą i pójdą z torbami.
A co się stało z SDJ? Ogłosili, że już nie wydają? Nie widziałem tej informacji, a niedawno czytałem numer z lutego.
Calkiem niezle, podobalo mi sie.
Kilka uwag (tych krytycznych):
W Aktualnosciach roi sie od prywatnych przemyslen autora. Pewnie chodzilo o zrobienie tej sekcji lekka i dowcipna ale wyszlo to dosc kulawo. Brawa za ambicje bo pisanie felietonow nie jest proste. Nastepnym razem dajcie to do przeczytania komus trzeciemu, najlepiej o innych pogladach.
Niemal wszystkie artykuly sa C/C++ centryczne. Wybor jak wybor, ale jesli tak ma zostac to warto byloby to odnotowac gdzies na okladce. Osobiscie wolalbym nieco szersze spojrzenie na programowanie (nie tyle jezyk co techniki jakie on narzuca).
"Obrazki" w (bardzo ciekawym) artykule o "ewolucyjnej architekturze". Tak to sobie mozemy porysowac na serwetce w pubie. Autor (mam nadzieje) wzial za ten artykul kase i nie chcialo mu sie narysowac kilku prostych kresek?
Rysunki sa najwazniejsza czescia artykulu. Dobrze zrobione powinny opowiadac prezentowana historie, a tekst powinien byc ich uzupelnieniem (w takiej tez kolejnosci najlepiej jest pisac artykuly). W praktyce roznie z ta jakoscia bywa ale niech przynajmniej nie beda niechlujne.
Dzieki za opinie.
@sirmacik, magazyn ten możesz udostępnić, tylko prosimy o podanie źródła. A z kolejnych wydań pewnie udostępnimy kilka artykułów. Czemu nie.
@ pijaczek, amator C++ nie wiemy co się dzieje z SDJ.
@Wojtek uwagi uwzględnimy, jeśli chodzi o artykuł rewolucyjna architektur, to postaramy się uzyskać od autora do następnego wydania inne obrazki, tylko, że on ma taki styl ich rysowania. Na jego blogu też można znaleźć tego typu obrazki.
C++ do Assebler lat 80'. Artykuły dot. programowania powinny conajwyżej wspomnieć o nim jak i o ASM by programista miał pojęcie co sie mniej więcej dzieje pod spodem. Dzisiejsze czasy to maszyny wirtualne, które naturalnie wchodzą w wielowątkowość. Pozwalają pisać soft niezależny od systemu. Kolejnym krokiem to soft działający niezależnie od maszyny wirtualnej (JVM / CLR). Przykładem może być język programowania Fantom.
C++ to strzał we własne kolano.
Haha 😉 Jak by wszystkie programy były pisane w Javie czy Fantomie, to byśmy się tutaj zesrali, czekając na ładowanie Firefoksa. C++ jest obecnie podstawą, a Java jest dla programistów "nie wiem jak to zaprogramować".
Jakbyś niezauważył to C++ staje się co raz bardziej niszowy. Jego popularność będzie spadać, bardziej uniwersalny jest C. Ciągle zostaną obszary w których język C++ jest najlepszym rozwiązaniem, więc pewnie zupełnie nie zaniknie prędko. Choć w tego typu zastosowaniach bardziej podoba mi się Vala 🙂
Patrząc na statystyki gazeta ograniczająca się do jednego języka C++ traci sporo potencjalnych czytelników.
>a Java jest dla programistów "nie wiem jak to zaprogramować".
Poziom programistów Java jest równie wysoki co C++ (jeśli nie wyższy), a jest ich znacznie więcej i za zwyczaj zarabiają więcej.
Poza tym tylko cieniasy programują w językach wysokiego poziomu. Prawdziwi programiści piszą w assemblerze, a najlepsi od razu w kodzie maszynowym, tylko ci co nie wiedzą jak programować używają takich wynalazków jak C, C++ i o zgrozo Java 😛
Tak, bo C jest o wiele bardziej przenośny, a sam kod łatwo zmodyfikować. Poza tym jest prosty jak drut.
C++ ze swoim narzutem i bibliotekami sprawia , że idea przenośności kodu bierze w łeb. Powraca natomiast w językach wyższego poziomu. Można powiedzieć , że C++ to taka czarna plama na spektrum j. programowania.
To, że nowa gazetka wyskakuje z C++ to nie żadna nowość. Polska zawsze była 10lat lat za mainstreamem. W czasach gdy wszędzie pisali w C/C++ u nas wychodziły tutoriale z BASICa , ASMa i innych wynalazków.
Tutorial do scali na przykład chętnie bym poczytał w takiej gazetce. Nawet bardzo.
Pamiętam powiedzenie od kogoś z twórców Javy. Mówił mniej więcej tak:
"Najważniejsze to pisać poprawny kod, bo za pół roku okaże się, że procesory będą tańsze, miały więcej rdzeni i będą szybsze, a komputery będą mieć więcej pamięci. Czas stracony na optymalizację kodu może się zupełnie nie zwrócić i zamiast działającego projektu będziesz mieć siano, którego utrzymanie pochłonie kolejne nakłady."
Powiedzenie kilka lat stare, ale widać jakie ma przełożenie na choćby soft na Androidzie. Dopiero co były procki jednordzeniowe, za niedługo będą 4 i 8 z gazylionem ramu oraz tanie jak barszcz.
Bawienie się w C++, czy optymalizację na kilka rdzeni, kiedy Java niemal naturalnie użyje dostępnych rdzeni jest zupełnie nieopłacalne.
Nieco przesadzasz z tą niechęcią do C++ 🙂 Poza tym są zastosowania gdzie potrzebny jest szybki kod i nie zmieni tego postęp technologiczny.
To są zastosowania niszowe. Jeżeli rozwiaznie jest standardowe (dekoder mpeg4 np.) to nie pisze się firmwareu tylko od razu umieszcza w układzie scalonym.
Wtedy szybki kod jest zbędny a bardziej liczy się szybka elektronika.
Poza tym zauważ, że dawniej programowanie chipów zaczynało się od ASMa , potem było C a dziś już robią dla Javy. Dlaczego? Ano dlatego, że nie opłaca się pisać w C/C++ skoro w tej samej cenie wydamy chip z Javą, który działa równie wydajnie.
http://www.elektroda.pl/rtvforum/topic2155354.htm…
C i C++ to podrygujące w agonii dinozaury.
"To są zastosowania niszowe. Jeżeli rozwiaznie jest standardowe (dekoder mpeg4 np.) to nie pisze się firmwareu tylko od razu umieszcza w układzie scalonym.
Wtedy szybki kod jest zbędny a bardziej liczy się szybka elektronika. "
A nie uważasz, że jeśli robimy coś mniej standardowego, taniej jest jednak napisać firmware (mamy coś taniego i akceptowalną wydajność)?
"Poza tym zauważ, że dawniej programowanie chipów zaczynało się od ASMa , potem było C a dziś już robią dla Javy. Dlaczego? Ano dlatego, że nie opłaca się pisać w C/C++ skoro w tej samej cenie wydamy chip z Javą, który działa równie wydajnie. "
Osobiście nie miałem przyjemności bawić się takim układem, ale czas pokaże czy będzie popularne takie rozwiązanie.
Do dzisiaj ludzie używają asemblera tam gdzie jest to niezbędne. Zawsze są miejsca gdzie trzeba pisać optymalnie, nie wszystko załatwią szybkie chipy.
Zobaczymy jak wydajna będzie ta Warszawa w praktyce i ciekaw jestem kiedy Oracle wyciągnie rękę po kasę za implementację JVM? 🙂
"C i C++ to podrygujące w agonii dinozaury. "
Popularność C++ faktycznie nieustannie spada, zapewne przez przechodzenie programistów Windows na C#, ale C jak na razie zyskuje w rankingach, co świadczy o zapotrzebowaniu na język natywnie kompilowany. C++ to z kolei czasem jedyny sposób by dzięki obiektowości ogarnąć większy projekt.
Jak programy napisane w Java lub Mono zaczną wypierać inne napisane w C, C++ lub Vala na moim desktopie, to wtedy Twoje twierdzenie będzie uzasadnione. Jak na razie nic na to nie wskazuje.
Czy na prawdę nie przychodzi Ci do głowy, że te wszystkie języki mogą ze sobą koegzystować?
Wiesz, w Fortranie też ktoś tam jeszcze skrobie , a hobbyści sami robią dziurki w kartach perforowanych. Nie zmienia to faktu, że C/C++ jest już poza mainstreamem.
Poza tym w chmurze , a takowa już nadchodzi mało co rzeźbi się w C. 😉
Poczujesz to po premierze Win8.
Aplikacje w chmurach pisze się w Javie lub nawet w językach skryptowych, bo wiele firm udostępniających chmury do obliczeń wiedzą jak maksymalizować zyski – po co mają się martwić o wycieki pamięci i api dla C/C++ skoro znacznie lepiej wyjdą robiąc api dla języka skryptowego jak Python w którym nawet o wielowątkości przez Global Interpreter Lock ciężko mówić, lub ewentualnie Java i za czas pracy aplikacji brać odpowiednią stawkę (czyli wielokrotnie więcej mogą zarobić niż jeśli daliby możliwość pisania w C/C++) – Cpp po prostu w chmurach nie jest opłacalne dla usługodawców.
Sam widzisz. Tu się pisze w Javie tam się pisze, a gdzie się pisze w C++?
W chmurach gdzie musisz płacić za czas pisze się w Javie (głównie dlatego, że nie można w C++, bo to niekorzystne dla usługodawców), Javy też znacznie częściej używa się na stronach internetowych (daleko do ASP, PHP, czy nawet Rubby, ale C/C++ jako język dla stron jest rzadko używany). W całej reszcie aplikacji klienckich, grach, bazach danych, aplikacjach serwerowych… używa się głównie C i C++, a Java i inne języki są używane rzadko (ofc są przykłady, i np. IDE programistyczne którego używam, jest w dużej mierze napisane w Javie, ale to są tylko nieliczne przykłady).
Trochę uprościłeś sobie problem 🙂
Pokaż mi dobry framework webowy dla C++ i zastanów się dlaczego takowego nie ma. I ciekaw jestem ilu chętnych byłoby, aby pisać aplikacje webowe w tym języku.
Prawie każdy kto miał okazję pisać dłużej w innym języku niż C++, ma spory problem aby przełamać się i wrócić do C++. C++ nie jest wygodny. Póki co jest jednak nieco wydajniejszy.
Od kiedy obliczenia w chmurze to zadanie webowe? Korzystałem z chmury Amazon'a, jednego z polskich dostawców i kilku rendererów w chmurze i nie mam pojęcia co tu ma framework webowy do rzeczy. Obliczenia w chmurze to nic innego jak po prostu obliczenia na klastrach w sieci gdy brakuje wydajności lokalnemu sprzętowi (np. chcesz obliczyć jakąś symulację i Twój komp liczyłby to przez miesiąc to płacisz za chmurę w której klasterek w z wirtualizowanym systemem specjalnie dla Ciebie włączy program i to policzy w znacznie krótszym czasie i nie zablokuje Ci kompa, ale będziesz musiał za to zapłacić).
To o czym mówisz to framework do pisania stron na zwykłym serwerze i tu nie ma mowy o chmurach.
A od kiedy obliczenia na GPU to chleb powrzedni każdego programisty?
Osz kurna dodałem textboxa to teraz czas na obliczenie macierzy odwrotnej o n=100 😉
Dla mnie od ~11-12 lat, dla innych od niedawna, dla CodeMonkey którzy nazywają programowaniem dodanie textboxa zapewne nigdy.
O Map Reduce słyszał?
Odnoszę takie wrażenie, z każdym komentem, że wiesz, że dzwoni ale nie wiesz w którym kościele.
Chmura, chmurze nie równa 🙂
App Engine to też chmura i nie służy do obliczeń. Takie obliczenia jak podajesz to nie jest chleb powszedni firm oferujących chmury.
Bardzo dużo portali działa na chmurach. Taki np Foresquare działa na chmurze Amazon i na tego typu usługach Amazon zarabia najwięcej.
W każdej sytuacji łatwiej jest zapewnić poprawne działanie kodu w chmurze dla języków z VM niż natywnie kompilowanych.
Żyjesz chyba w innym świecie. C to drugi co do popularności język programowania.
@jkl
Tragicznie się mylisz. Środowisko uruchomieniowe Javy nie zapewni Ci zrównoleglenia programu, o ile sam o to nie zadbasz.
Różnica jest taka, że jeżeli chcesz zadbać, to w odróznieniu od C++ masz trochę standardowych metod jak to osiągnąć.
Nieprawda kolego. Pisząc już AŻ POPRAWNY kod mam szansę na zrównolegnienie działania w Javie. Sprawę załatwia JRE, które cały czas ewoluuje. Wszystko dzieje się pod maską i mnie nie obchodzi dopóki działa. http://www.youtube.com/watch?v=CnPneIESNhU
Jeżeli są 4 rdzenie w PC to Java zrobi z nich użytek w przeciwieństwie do C++. Jako że Windowsy są pisane w C++ nie potrafią dobrze zarządzać procesorami wielordzeniowymi.
Wyszło to na jaw przy okazji testów w którejś gazetce, gdzie na 8xCore AMD Win7 padał kołami do góry pod względem wydajności. W przeciwieństwie do Linuxa, który został napisany w brzydkim C bez narzutu kulawych bibliotek C++.
Typowy przykład na zaściankowość C++ to te wszystkie BSODy, gdzei system nie potrafi podnieść się po JEDNEJ kulawej aplikacji, której się podwinęły nogi. Natomiast chodzą plotki, że ktoś widział kernel panic z Linuxa na żywo.
Przykładem na odchodzenie od C++ jest XNA. XNA – czyli biblioteka do tworzenia gier w kodzie zarządzanym. Później Minecraft, JMonkeyEngine itp.
"Typowy przykład na zaściankowość C++ to te wszystkie BSODy, gdzei system nie potrafi podnieść się po JEDNEJ kulawej aplikacji, której się podwinęły nogi. Natomiast chodzą plotki, że ktoś widział kernel panic z Linuxa na żywo"
Systemy takie jak AS/400 oraz następca i5/OS, które są powszechnie uważane za najbezpieczniejsze i najbardziej niezawodne, powszechnie stosowane na mainframe'ach bankowych, są całkowicie napisane w C++.
Twoje wywody są amatorskie, niczym nie poparte i po prostu z dupy.
Cieakwe jakich bibliotek używają, bo wątpię by boost, c00x i inne badziew
Poczytaj sobie co na tym AS/400 jest potem się wypowiadaj.
Nie wiem czyje tu wywody są z dupy skoro nawet nie orientujesz się w tym co podajesz za przykład.
"Poczytaj sobie co na tym AS/400 jest potem się wypowiadaj. "
Na Linuksie jest PHP więc pewnie w tym został napisany.
Co kogo interesuje w czym został napisany system? Aż tak niskie IQ przejawiasz?
System daje dostęp do zasobów sprzętowych i ma się nie wtryniać.
Na mainframe daje się JRE i z bańki. Java bez pomocy hordy dziadków od C++ daje radę się zoptymalizować w locie. Przesłałem ci link do video, gdzie twórca Javy daje kawę na ławę w czym Java jest lepsza od reszty nawet fakty z wdrożeń wyciąga, a ty i podobni jajogłowi idziecie w zaparte.
Obudź sie . Czasy C i C++ dawno minęły. Wiem, że MS spróbuje stworzyć nową modę na C++ by podnieść sprzedaż, ale po lecących udziałach giełdowych i topniejącym udziale systemów w rynku nie ma na to szans.
@jkl
Napisałeś:
"Typowy przykład na zaściankowość C++ to te wszystkie BSODy, gdzei system nie potrafi podnieść się po JEDNEJ kulawej aplikacji, której się podwinęły nogi. "
Jest to totalna bzdurą ponieważ jądro najbardziej niezawodnego systemu na świecie czyli OS/400 i późniejsze jest napisane w C++, mało tego ten język został wybrany celowo z myślą o najwyższej niezawodności.
Popisałeś się niewiedzą i jeszcze idziesz w zaparte. 😉
@jkl
Bredzisz kolego. C i C++ jeszcze na długo pozostaną podstawowymi językami programowania systemowego. Wiele aplikacji z których korzysta się na co dzień jest napisana w C++ i żadne opowieści o wyższości Javy tego nie zmienią.
Większość softu na Win to C#, a nie C++ więc twoja teoria znów pada.
"Większość softu na Win to C#, a nie C++ więc twoja teoria znów pada. "
ha ha ha 🙂
Większość softu to C/C++, a nieliczne są C/C++ z dodatkiem C# (głównie przepisany interface mają, a jądro aplikacji dalej jest w C++).
Większość unikalnego kodu to skrypty. cpp ogranicza sie do skopiowania biblioteki biblioteki.
"Przesłałem ci link do video, gdzie twórca Javy daje kawę na ławę w czym Java jest lepsza od reszty nawet fakty z wdrożeń wyciąga, a ty i podobni jajogłowi idziecie w zaparte. "
A wysłuchałeś jakiegoś guru od C++? Każda sroka swój ogon chwali. Java ma zalety, ale ma też wady, trzeba umieć wybrać co będzie najlepsze dla konkretnego projektu.
Spróbuj napisać aplikację web na najlepszy framework c/cpp i najlepszy Javy . porównaj opłacalność budżet/czas . Ile potrzeba by napisać hello worlda w obu z bazą pod spodem. 😉
"Spróbuj napisać aplikację web na najlepszy framework c/cpp i najlepszy Javy . "
Z tych samych powodów częściej korzysta się z PHP niż Javy.
"Ile potrzeba by napisać hello worlda w obu z bazą pod spodem. 😉 "
Akurat z Witty można napisać prostą aplikację bardzo szybko, gorzej gdy chcemy z niej zrobić atrakcyjny portal z różnorodnymi usługami.
Problem w tym, że tradycyjne popularne frameworki Javowe nie są ani szczególnie wydajne, ani nie pozwalają na szybkie tworzenie aplikacji, jak to jest możliwe w przypadku języków skryptowych.
Dlatego taką furorę zrobiły RoR i Django.
Java ma podobny framework : Play. (nareszcie?)
Play dla Javy jest całkiem ciekawy (dla Scali to porażka), nie wiem tylko czy się spopularyzuje, bo wszędzie tylko Spring.
"Jeżeli są 4 rdzenie w PC to Java zrobi z nich użytek w przeciwieństwie do C++. Jako że Windowsy są pisane w C++ nie potrafią dobrze zarządzać procesorami wielordzeniowymi. "
Nie wiem dlaczego zarządzanie procesorami wielordzeniowymi uzależniasz od zastosowanego języka programowania/platformy (IMHO w każdym języku można napisać dobry wielordzeniowy kod). IMO jest to kwestia implementacji i nie sądzę aby napisanie systemu operacyjnego używając Javy było dobrym pomysłem (np: nie potrafię sobie wyobrazić jak Java mogłaby niskopoziomowo komunikować się z urządzeniami).
Dlatego, że to przyszłość i od tego się nie ucieknie.
"cji i nie sądzę aby napisanie systemu operacyjnego używając Javy było dobrym pomysłem"
Doczytaj sobie nad czym pracuje MS (Singularity) to się dowiesz.
Nic dziwnego, że gazetki C++ wychodzą jak tu takie zacofanie.
"Doczytaj sobie nad czym pracuje MS (Singularity) to się dowiesz. "
Doczytaj sam – Singularity jest pisany w C#, ale nie takim C# jak znasz – okrojony ze wszystkiego i w pełni natywny (została jedynie część składni, ale już wszystkim nie zarządza .NET, a kompilator kompiluje kod do pośredniego dokładnie takiego jak wychodzi z kodu C/C++ i tłumaczy go na natywny dla platformy). C# z Singularity niewiele się różni w praktyce od C++ przy pisaniu systemu operacyjnego.
I o to chodzi! Kod pośredni, optymalizacja. To jest serce VM.
C++ ZAWSZE wypluwa ten sam kod niezależnie od procka.
Ogarnij o czym tu mowa : statyczna kompilacja C++ vs dynamiczna kompilacja JVM.
Ogarnij – statyczna kompilacja dla danego procka jest znacznie wydajniejsza niż dynamiczna JVM (głównie dlatego, że czas kompilacji aplikacji nie jest tak ważny i projekt może się kompilować pół godziny, bo ważna jest wydajność końcowego kodu, wektoryzować na SSE/AVX/NEON/… i nawet korzystać z profili, korzystać z optymalizacji IPO, LTO, żeby wyszedł optymalny kod). JVM ma związane ręce i może jedynie robić mało optymalny kod za pomocą JIT, w którym nie ma mowy o poważniejszych optymalizacjach.
Jit w JRE ma twój procek na talerzu u użyje wszystkich znanych mu sztuczek do optymalizacji na niego. Twoja wypocina jest kompilowana tylko raz. Opymalizowana dla proca A nie pójdzie na procku B, a ja mam to gdzieś bo użyję biblioteki Javy która ma 10 lat na Andiodzie (zupełnie inny typ procesora) i będzie działać. Ot tak już po skopiowaniu.
W możesz sprawdzić jaki to procek jest i jakie ma możliwości i uruchomić dla niego optymalny kod, a Javie kod bitowy jest praktycznie niezoptymalizowany bo nie wiadomo gdzie on ma później działać, a wirtualna maszyna nie ma czasu na optymalizację i w efekcie wychodzi marny kod, który nie może się mierzyć nawet z takim który jest optymalizowany pod bardzo stare procki i olewa nowości.
"Jit w JRE ma twój procek na talerzu u użyje wszystkich znanych mu sztuczek do optymalizacji na niego. "
I co z tego skoro niemal zawsze java jest wolniejsza od C i C++?
Przykładowy zestaw bencharków: http://shootout.alioth.debian.org/u32q/benchmark….
Przeciętnie jawa jest 81% wolniejsza od Fortrana, 70% od C i 43% od C++.
48% to super. Nic nie robiąc a tylko żłopiąc kawę i dokładając 1 procek przegonię wydajnością dziadka fachmana od cpp, który za byle g. optymalizacji nie zrobi 🙂
Poza tym widziałem takie testy , gdzie cpp failował kilkanaście razy zanim fachur napisał kod wydajniejszy od javy , która wyskrobał uczniak 1go roku gimnazjum. 😉
To zerknij jeszcze na zużycie pamięci. Na Javie jest większe od 2 do kilkudziesięciu razy, a przeciętnie kilka razy większe.
Pod tym względem nawet mono deklasuje Javę.
Pamięć nieużywana to pamięć zmarnowana. Zresztą te testy i tak są do d**y, bo Java pewnie jedzie na ustawieniach domyślnych a to zużycie pamięci można przyciąć jednym parametrem.
Ale to i tak nie jest największą wadą tych testów – bo po prostu nikt tak kodu nie pisze. Kod na 100 linii to sobie możesz optymalizować nawet i w asemblerze. W praktyce dochodzi wymaganie, aby kod dało się pielęgnować. I tu C++ leży i kwiczy. Bo możesz albo napisać ładny kod z użyciem STLa, Boosta, smart pointerów, nie używając prawie nigdzie new i delete, rozbijając wszystko na moduły i klasy, ale taki kod C++ jest zwykle dosyć powolny – często znacznie powolniejszy niż Java.
Powodów jest wiele – JVM lepiej optymalizuje wywołania wirtualne, genericsy nie powodują takiego "code bloat" jak szablony C++, alokacja pamięci na stercie w Javie jest szybsza i przyjaźniejsza dla cache, nie ma problemów z framentacją pamięci, JVM potrafi wykonywać optymalizacje blokad w kodzie wielowątkowym itp. Można tak długo wymieniać. To są wszystko rzeczy, których nigdy nie widziałem w żadnym benchmarku, a mają duże znaczenie w realnym programowaniu.
W praktyce, na dużych aplikacjach widzę, że:
1. systemy baz danych napisane w Javie skalują się lepiej niż te w C++, stąd np. Amazon używa Javy a nie C++, ba trudno tu szukać odpowiedników np. takiej Cassandry w C++, a HBase mimo że ma porąbaną architekturę odziedziczoną po BigTable, parę konkursów wydajnościowych i tak wygrał.
2. serwery www działaja tak samo szybko (Netty vs Nginx, Tomcat vs Apache)
3. gry radzą sobie równie nieźle (Jake vs Quake 2)
4. duże aplikacje desktopowe, np. IDE nie są znacznie pamięciożerne niż odpowiedniki podobnej wielkości i funkcjonalności w C++; choć ciężko znaleźć odpowiednik w C++, który miałby choć 1/3 możliwości IntelliJ IDEA (VS jest przy tym jak notatnik z kolorowaniem składni)
Zapominasz, że Java dzięki większemu zapotrzebowaniu na pamięć odrabia trochę do C++ – robi jedną prealokację dla GC i później tylko przyznaje wskaźniki, gdy w C/C++ jeśli nie napiszesz sobie zarządzania pamięcią w aplikacji alokujesz wszystko osobno za pomocą wielu malloc/new i wielokrotnie alokując małe jednostki pamięci przez co Java akurat tu i w naiwnym kodzie C++ jest nawet szybsza. Jeśli testy zmniejszyłyby znacznie domyśle ustawienia prealokacji to Java wypadałaby znacznie gorzej (w wypadku jeśli JVM musiał alokować dodatkową pamięć w trakcie działania programu).
1. Duże systemy bazodanowe są pisane tylko w C++ i się lepiej skalują. Przytoczony Amazon korzysta z MySQL i Oracle przez Amazon Relational Database Service, a nowe małe bazy NoSQL ma w Erlang (Amazon SimpleDB) i Java (DynamoDB) ale ta jeszcze ma status beta.
2. Możesz pokazać benchmarki na których opierasz swoje zdanie… najlepiej jeszcze jakbyś porównywał, porówywalne serwery czyli Netty z Lighttpd który jest sporo wydajniejszy od Nginx (dlatego też Lighttpd jest tak popularny w zatłoczonych serwisach jak YouTube czy Wikipedia).
3. Aż sprawdziłem benchmarki twórców Jake i aż mnie zamurowało jak dużo traci na Javie gra która na obliczeniach CPU praktycznie nic nie robi (zapewne straty jednak to powolne JNI i odwoływanie się do bibliotek OpenGL, bo jeśli to przez samą Javę to jest wręcz tragedia w grze która na kalkulatorze by poszła, a większość czasu klatki spędza na GPU (nawet kilkukrotna różnica w wydajności na CPU w tak starej grze odbija się tylko nieznacznie na FPS ze względu na to, że i tak większość czasu spędza gra na GPU)). Gra w dzisiejszych standardach z fizyką liczoną w Javie to by była zabawna sprawa i ciekaw jestem za ile lat komputery mogłyby uruchomić to w RT.
4. IntelliJ IDEA jest fajnym IDE, ale nie przesadzaj z tymi porównaniami do VS bo ten akurat jest znacznie potężniejszy niż Ci się wydaje (chociaż ssie w podpowiadaniu składni akurat czyli prostej rzeczy i warto kupić Visual Assist X). VS to też słaby przykład bo on jest od kilku lat przepisany w części do C# – UI zostało przepisane do C#, a reszta została w C++. Jeśli chcesz porównywać możliwościami IDE do VS to zamiast małego IDE warto przeciwstawić równie potężnego smoka czyli Eclipse, ale to IDE w Javie jednak potrafi dać w kość pamięci, a i najszybsze nie jest (za to możliwości i masa pluginów pozwala to wybaczyć).
Alokując mało i często prowadzisz do fragmentacji pamięci . Po pewnym czsie twój c++ działa wolniej od maszyn na karty perforowane.
W gierkach cpp może i daje rade ze wzgledu na to ze obiekty ladujesz raz i tylko pokazujesz na scenie lub nie. Wsystemie web masz tysiące unikalnych obiektów w ciągu sekundy. Bez defragmentacji pamięci taki system w cpp długo nie żyje. Dovhodzi do tego czas czekania na bazę i użyteczność cpp dalej leci na łeb już nie wspominając o tym, że gdy chce napisac aplikacje to prawie wszystko trzeba wynaleźć na nowo, bo albo nie ma dobrych bibliotek albo dzieją się dziwne rzeczy.
Poza tym po pewnym czqsie cw bardziej zaawansowanym projekcie człowiek więcej czasu na łatani bugów ktore w javie w ogóle nie występują.
Co do fragmentacji pamięci to nie masz pojęcia jak działa pamięć ram. To, że jest rozsiane po pamięci nie jest problemem, ale sama alokacja jest (szukanie odpowiednio dużej pustej pamięci do alokowania). Dlatego nikt poważny tak nie robi i zarówno gry jak i serwery mają swoje managery pamięci alokujące rzadko i dużo. Niektóre programy jak są tak wyczulone, że poza korzystaniem z własnych managerów zaciągają do pracy implementacje GC dla C i Cpp na wypadek gdyby był błąd w managerze.
Fragmentacja powoduje stopniową degradację wydajności, bo zmniejsza efektywność działania cache i do tego może drastycznie zwiększyć zapotrzebowanie na pamięć. Pogadaj z gośćmi od Firefoxa, ile im czasu zajęło uporanie się z tymi problemami (a nadal chyba nie do końca dobrze to działa).
Specjalizowane managery pamięci działają w niektórych bardzo specyficznych przypadkach, jeśli np. jest znany czas życia obiektów. Jeśli nie jest to niewiele to daje, a wręcz tylko przeszkadza i zaciemnia kod.
Masz rację, każda dostatecznie skomplikowana aplikacja w C++ posiada wbudowaną, zabugowaną, połowiczną implementację maszyny wirtualnej Javy 😀
Skoro jawa jest taka dobra to dlaczego jest jej tak mało na desktopach (np. osobiście nie mam żadnego programu napisanego w jawie)? Wyjaśnienie jest bardzo proste: widocznie nie jest taka cudowna, jak ją niektórzy malują. Java pomaga zdecydowanie obniżyć kosz powstania i utrzymania programu/systemu. Jest to ważne jeżeli system jest sprzedawany w stosunkowo niewielkiej liczbie egzemplarz lub pisany na zamówienie, wtedy koszt kodowania oraz konserwacji kodu ma znaczący wpływ na cenę produktu, stąd jej wysoka popularność w rozwiązaniach enterprise, a mizerna w desktopowych.
Jawa powstała z myślą o urządzeniach popularnych gdzie sprzedaż idzie w tysiące jak nie miliony, a stała się dominatorem na rynku przedsiębiorstw, gdzie aplikacje często są pisane w pojedynczych egzemplarzach na zamówienie – daje to do myślenia.
Yhym. Sczególnie dobrodziejstwo korzystania z C++ (szybkość, jakość i zajętośc RAM) można zauważyć na przykładzie pewnego popularnego w Polsce komunikatora. 😉
W Javie pisze się w biznesie bo ma najlepsze narzędzia ułatwiające wprowadzanie szybkich zmian (zaraz po narzędziach 4GL). JVM pilnuje obiektów i nigdy nie zdarzy się, ze wstawisz dane na 7 miejsce w 5 elementowej tablicy i ci to ujdzie płazem. Czyli : BEZPIECZEŃSTWO.
Jak jakiś programista próbuje wstawić 7. zmienną w 5.-elementową tablicę, to proponuję zwolnić programistę. Od tego jest człowiek, żeby myśleć jak kodzi, nie maszyna wirtualna. To tylko potwierdza moje zdanie, że programiści Javy nie umieją programować.
Racja, przecież powszechnie wiadomo, że programiści C++ absolutnie nigdy nie popełniają błędów.
Popełniają, ale nie w takich banalnych przypadkach. A bardziej złożonych przypadków jawet Java nie przewidzi.
@Kist
Czyżbyś widział mało kodu w C++?
Przy sprawdzaniu automatami kodu C++ potrafią wychodzić takie kwiatki, że programista wstawia dane do tablicy poza jej zasięgiem, ale szczęśliwie ląduje to w takim obszarze pamięci że program działa jednak prawidłowo.
Ludziom częściej zdarza się popełniać banalnych błędów niż w sytuacjach bardziej złożonych, bo tam bardziej się koncentrują.
Od tego są testy, żeby złapać tak proste błędy jak wyjście poza tablicę, bo C++ się po prostu od razu segfaultnie. A jeżeli naprawdę chcemy mieć pewność, że się nic nie wysypie, wystarczy użyć kontenerów std::vector czy std::array, ewentualnie używać iteratorów. Ale takich błędów się po prostu nie powinno popełniać.
Chyba mało wiesz o programowaniu niskopoziomowym i o tym jak działa pamięć w systemach ze stronicowaniem. Przy takim błędzie masz 99/100 szans, że się nie segfaultnie i testy niczego nie wykażą. Samo użycie kontenerów STL też nic nie da, bo one domyślnie nic nie sprawdzają, chyba że masz na myśli at(), ale ono z kolei ma gigantyczny narzut czasu wykonania. Segfaultnie się dopiero pod valgrindem, ale nie wszystko da się pod valgrindem testować, bo kod chodzi 100x powolniej.
stl w msvc sprawdza indexy na debugu niezależnie od użycia [ ] lub at()
Wszystko fajnie, tylko zapomniałeś, że "na debugu" jest wiele razy powolniejszy od Javy. 😀
"bo C++ się po prostu od razu segfaultnie"
Jak wyjedziesz poza obszar przyznanej pamięci jak nie to nadpisujesz jakiś swój obszar danych
Używając kontenerów z kolei zbliżasz się do wydajności Javy 🙂
A dlatego człowiek jest człowiekiem bo popełnia błędy musi je tylko umieć naprawiać
Uściślenie: jak wyjedziesz poza obszar strony pamięci przydzielonej Twojemu procesowi. Wcale nie musisz nadpisać jakiegoś własnego obszaru danych, więc taki błąd może przejść całkowicie niezauważony, zwłaszcza jeśli to jest tylko "off by one".
Jeśli używasz at() do sprawdzania zakresów wektorów, shared_ptr do półautomatycznego zarządzania pamięcią, i często nie znasz ilości danych (czyli pozwalasz np. kontenerom amemu się rozszerzać) to jesteś wydajnościowo daleko w tyle za Javą.
@jkl
"Doczytaj sobie nad czym pracuje MS (Singularity) to się dowiesz. "
Wyszło szydło z worka. Poruszasz się w krainie pobożnych życzeń i fantastyki. Dopóki ten system nie wyjdzie i udowodni swojej wyższości, to jakiekolwiek spekulacje na temat jego rzekomej nowoczesności i lepszości są kompletnym stekiem bzdur.
To jest system testowy, który pewnie nigdy nie ujrzy światła dziennego a rozwiązania z którego są implementowane w nowszych Windowsach. Doucz się kolego.
Skoro jest testowy to czemu sugerujesz, że jest lepszy? Bo w każdym poście bredzisz i się pogrążasz.
Kiedyś testowano możliwość wyrzucania rakiet za pomocą bomb jądrowych. Testy zakończono kompletnym fiaskiem i Ty poruszasz się w tej dziedzinie – fantastyki oraz myślenia życzeniowego.
Coś ci się z IQ dzieje niepokojącego.
Nigdzie nie pisałem , że jest lepszy tylko co lepsze jest ładowane do Windows.
Ogarnij gimbazę człowieku.
I co wzięli z tego projektu?? Głównym zamierzeniem miała być rezygnacja z ochrony sprzętowej na rzecz programowej.
"Nie wiem dlaczego zarządzanie procesorami wielordzeniowymi uzależniasz od zastosowanego języka programowania"
Trochę to jednak zależy od języka i bibliotek. Wystarczy spróbować jak łatwo pisze się wielowątkowo z użyciem Actora w Scali. Sam problem ze zwalnianiem pamięci w C++ w programie wielowątkowym może być całkiem skomplikowany.
"nie potrafię sobie wyobrazić jak Java mogłaby niskopoziomowo komunikować się z urządzeniami"
Słyszałeś o JNI?
Pisanie kernela w języku z VM nie jest dobrym pomysłem, przekonał się o tym Microsoft tworząc Singularity. 🙂
MS nie przejechał się na samym VM, bo w oparciu o to działa choćby WP7.
Przejechał się na koncepcie mikrojądra.
Bzdura – WP7 działa na poprawionym starym jądrze z WM, a za chwile jądro z WP7 zniknie, bo jądro Win8 ma działać na ARM i szybko ujednolicą platformy.
No właśnie , brak reuse = robota od,zera, nowy system. Cieniutko z tym cpp.
Gdyby działało na starym jądrze to nie byłoby problemów ze starym softem.;)
I miałoby powolne stare jądro ze starymi algorytmami (i to nie jest zupełnie zależne od języka jak całą architekture jądra i większość algorytmów się wymienia).
Teraz twierdzisz, że C++ jest powolny?
Twierdzę, że algorytmy zastosowane przez Microsoft w jądrze są przestarzałe i powolne, a nie język.
No widzisz, a kod w Javie napisany 10 lat temu nie potrzebuje takich operacji i będzie się wykonywać na 10 rdzeniach choć w tamtych czasach nikomu się o tym nie śniło.
Kod tak, podobnie jak kod w C++ czy C, problem jest z algorytmami które ewoluują i podchodzi się do problemów na różne sposoby. Dobrym przykładem jest to co przez cały czas powtarzasz, czyli Linuks wydajniejszy od Windowsa na wielordzeniowych maszynach i aplikacjach wielowątkowych czyli algorytm scheduler'a – Linux przez lata korzystał z algorytmu multilevel feedback queue (z którego korzysta Windows) który działa dobrze, ale nie rewelacyjnie (złożoność O(n)), w jądrze 2.5 i 2.6 do podwersji 22 korzystano z O(1) scheduler, który miał bardzo przyjemną złożoność (stałą), ale ten czas stały był dosyć wysoki i od 2.6.23 mamy Completely Fair Scheduler, który ma teoretycznie gorszą złożoność (O(log n)), ale implementacja działa na tyle szybko, że przeważnie jest lepszy niż O(1) scheduler (a już kilka nowych algorytmów schedulera stara się o wyparcie CFS, bo dają lepsze rezultaty)… a Windows dalej siedzi na multilevel feedback queue. Jakbyś napisał multilevel feedback queue w Javie 10 lat temu jak Microsoft to dalej by to działało tak jak działa w Windowsie (tylko jeszcze wolniej), a rozwój algorytmiki i tak nakazałby Ci przepisać program.
Drugim przykladem niech będzie NoSQL, gdzie bazy SQL dalej działają świetnie i są mega uniwersalne, ale teraz powoli są wypierane przez bazy specjalizowane w dany problem (można wyrzucić uniwersalność do kosza, gdy trzeba trzymać tony bardzo specyficznych wpisów i liczy się wydajność w bardzo specyficznych zadaniach).
Masz rację i zarazem podajesz dobre powody, dla których C++ staje się coraz bardziej niszowy. Kluczowe są optymalizacje wysokopoziomowe i dobra architektura, a nie mikrooptymalizacje. W C++ masz nieco większą kontrolę nad generowanym kodem (też nie masz pełnej kontroli takiej jak w asm, ale jednak większą niż w Javie), ale za to masz znacznie gorsze narzędzia do programowania wysokopoziomowego kodu, czyli tworzenia odpowiednich abstrakcji. Np. do niedawna biblioteka standardowa nie posiadała nawet tablic z haszowaniem. Efekt był taki, że albo programiści pisali wszystko od zera, spędzając 10x więcej czasu nad projektem (tylko teoria), albo czasu zwyczajnie nie starczało i wypuszczali nieoptymalny kod, używający słabych, ale prostych i w miarę bezpiecznych algorytmów (praktyka). I dlatego większość kodu C++, który powstaje, jest bardzo daleka od optymalności, np. ArcGIS, który nawet nie umie sensownie buforować rastrów tak aby dało się szybko widok zmieniać.
"Sam problem ze zwalnianiem pamięci w C w programie wielowątkowym może być całkiem skomplikowany. "
Dlatego programy w Cpp robią własne zarządzenie pamięcią i problem znika.
"Słyszałeś o JNI?"
JNI nie potrafi się komunikować z urządzeniem, ale z kodem natywnym (najczęściej C/Cpp), który się komunikuje z urządzeniem – wprowadza to dodatkową warstwę abstrakcji która ma bardzo duży narzut.
"Pisanie kernela w języku z VM nie jest dobrym pomysłem"
Microsoft nie pisał kernela w języku z VM – pisali w C#, ale bez VM. VM nie jest przydzielony do języka i C# jak i Java mogą być kompilowane do kodu natywnego, a C i Cpp mogą korzystać z VM (przykładowo korzystając z kodu bitowego LLVM, gdzie kod C może być uruchomiony na ARM i X86 bez rekompilacji, jednak sporo wolniej działa VM JIT vs kompilacja do kodu natywnego).
I w czasie, jak Ty po raz Nty wyndajdujesz własne zarządzanie pamięcią oraz debugujesz valgrindem kod, Notch wypuszcza Minecrafta i zgarnia kilka baniek, a o Twoim sofcie nikt nie słyszał 😀
jeśli ktoś jest idiotą i robi wywołanie JNI w najbardziej zagnieżdżonej pętli, to pewnie masz rację
"Minecrafta i zgarnia kilka baniek"
To czemu Ty tego nie zrobiłeś? Przecież siedzisz w jawie.
Najnowsza implementacja Minecrafta "Minecraft Pocket Edition" na Androida i iOS jest już napisana w C++
Jeżeli Minecraft powstawałby dzisiaj to również zostałby napisany w C++. Nikt nie przypuszczał, że ta gra odniesie sukces, więc wzięli technologię generującą niskie koszty, ale średnio nadającą się do tego typu zastosowań.
Bo ze zdania "jeśli nie A to nie B" nie można wnioskować "jeśli A to B". Wypuszczenie aplikacji jest warunkiem koniecznym, ale niewystarczającym do odniesienia sukcesu.
Istnieje kilka gierek Minecraftopodobnych napisanych w C++ i na razie sukcesu nie odniosły.
"Istnieje kilka gierek Minecraftopodobnych napisanych w C++ i na razie sukcesu nie odniosły. "
Nasza-klasa napisana w PHP odniosła sukces, a inne podobne napisane w np. javie nie. Czego to dowodzi? Że jawa śmierdzi 🙂
A były jakieś inne podobne pisane w javie?
A na XBox piszą Minecrafta w XNA.
"Jeżeli Minecraft powstawałby dzisiaj to również zostałby napisany w C++."
Jaki sens ma takie gdybanie. Gdyby było wiadomo, że gra odniesie taki sukces to może napisano by ją nawet w assemblerze, działałaby jeszcze szybciej. Swoją drogą zastanawiam się czy na prawdę taka gra w C++ byłaby szybsza.
Duże studia programujące gry mają swoje silniki, narzędzia i kawałki kodu w C++ więc nie mają powodu zmieniać języka. Małe studio nowe na rynku nie ma szans pisać w C++ bo zanim zrobi cokolwiek interesującego stare firmy zdążą zrobić coś podobnego. W Javie nie zrobi się konkurencyjnego Battlefild, ale nieco mniejsze gierki nie potrzebują tej całej machiny jaką mają wielkie studia. Mogą wytworzyć aplikację znacznie taniej i szybciej, a sukces opierają na pomysłowym scenariuszu czy grywalności, a nie na samych efektach graficznych.
Poza tym, większość pracy i tak wykonują karty graficzne, więc silniki mogą być wykonane w C, a sama mechanika gry może być tworzona np w Javie bez pomocy języków skryptowych takich jak Lua. Różnica w wydajności jest wtedy niewielka.
Tak, i Minecraft jest obecnie najgorszą grą pod kątem stosunku wydajności do jakości grafiki. Może za 20 lat, teraz na 100% mówimy wielkie NIE Javie.
Płacz sobie ile chcesz, ale ludzie to i tak kupują.
Własnie sprzedano 5 MLN kopii. Zmiękła ci rura?
Zamiast grzebać w C++ było tworzyć w Javie coś co działa i byś był bogaty. 😉
Lepiej pisać takie Angry Birds w C++ i sprzedać znacznie więcej przy mniejszych kosztach ;p
Gdyby nie spam to o AB nikt by nie słyszał. Przestań trollować. Wracaj do swojego żałosnego światka cpp i pokompiluj sobie jądra.
Gdyby nie osoby kompilujące jądra to wybierałbyś puszki ze śmietnika :). Idź dalej oprogramywać eventy na przyciskach i wypełniać labele danymi z bazy – buahaha.
Angry Birds jest w HTML5 i to właśnie z powodu obniżenia kosztów wytworzenia na różne platformy. W C++ mogła by być bardziej wydajna, ale koszt wytworzenia i utrzymania byłby znacznie większy.
Angry Birds jest w C++ i wykorzystuje bibliotekę graficzną SDL i silnika fizyki Box2D. Ale później powstały porty również do JavaScriptu dla przeglądarek.
"Własnie sprzedano 5 MLN kopii. Zmiękła ci rura? "
Simsów sprzedano 150 mln egzemplarzy.
"Zamiast grzebać w C++ było tworzyć w Javie coś co działa i byś był bogaty. 😉 "
Ale "Minecraft Pocket Edition" na Androida i iOS jest już w C++.
Rura Tobie zmięknie jak jak przepiszą go na C++. Co prawda autorzy mówią, że na razie jawa im wystarcza i nie maja zamiaru, ale jest silna presja ze strony użytkowników.
Nie przepiszą. Zapomnij. Zabiłoby to tę grę (chociażby mody). Jest równie silna presja ze strony użytkowników aby go rozwijać dalej w Javie.
Gdyby nie Java to nie mieliby kasy na przepisywanie do C++. 😉
Jak na razie przepisują na C#.
To jak narzekaniem na mulistość Eclipse i twierdzeniem, że szkoda, że nie jest w C++. Tylko dlaczego nikt jeszcze nie napisał tego w C++?
Może okaże się że w C++ wcale nie będzie szybciej? I ciekawe kto zapłaci za nową wersję programu?
A jak mierzysz jakość grafiki? Minecraft jest klockowaty celowo, poza tym jest grą symulacyjną, gdzie większość CPU pochłania symulacja a nie rysowanie grafiki. Rysowaniem grafiki zajmuje się OpenGL i karta, Java nie ma tu prawie nic do roboty.
Minecraft nie jest celowo klockowy, a to trochę efekt voxelowego świata i ograniczonej ilości pamięci. Bzdurą jest to co mówisz, że GPU ma tu dużo roboty, bo grafikę akurat w dużym stopniu robi CPU, a OpenGL i GPU nie ma tu wiele do roboty. Jest to dodatkowo bardzo naiwny sposób renderowania voxeli i daleko do Sparse Voxel Octree prezentowanego w 2008, który pozwala organizować lepiej voxele w octree i wyświetlać bardziej szczegółowe modele, ale w Minecraft nigdy nie liczyła się strona techniczna, tylko rozrywka podobnie jak Angry Birds który jest prosty jak drut, można napisać taką grę na kolanie w kilka godzin, a zarobiła więcej niż największe tytuły.
Bo liczy się grywalność a nie FPS. Cpp było dobre w czasach quake 1, gdzie nie było akceleratorów. Teraz jest zbędne.
"Angry Birds który jest prosty jak drut, można napisać taką grę na kolanie w kilka godzin, a zarobiła więcej niż największe tytuły. "
Bez przesady.
Simsy zarobiły 2000 mln $
GTA IV w jeden dzień 300 mln $
Wiedźmin 2 około 60 mln $
Assassin's Creed Brotherhood 400 mln$
Call of Duty Modern Warfare 3 w 16 dn 1000 mln$
Minecraft oraz Angry Birds zarobiły podobnie po ok. 80 mln $ – sporo, ale tego typu gry to inna – trzecia liga.
Może porównaj ile zarobiły w stosunku do poniesionych kosztów. A zresztą, o czym my tu dyskutujemy w ogóle? Notch za dobrze pisać gier nie umie i to nie jest żadna tajemnica.
Ale stwierdzanie, że Java jest powolna bo Minecraft ma słabą grafikę, jest tak samo sensowne, jak to, że C++ się nie nadaje do pisania aplikacji desktopowych, bo LibreOffice nie umie dobrze czytać dokumentów MS Word.
"Może porównaj ile zarobiły w stosunku do poniesionych kosztów. "
Kwestia mody. Kiedyś w Polsce grało się w ''Małysza" – właściwie to był szał. I czego to dowodzi? Doskonałości technicznej Windowsa i DirextXa – chyba nie bardzo.
Java udowodniłaby swoja wartość jeżeli ukazałby się na nią np. Assassin's Creed czy. program np. taki Photoshop. A tak, w większości przypadków, siedzi gdzieś na serwerach, na zapleczach banków i gdyby nie fanboje na forach to nikt by nie wiedział, że takie cos istnieje :).
95% aplikacji na przeciętnym desktopie jest napisane w CC++, ale ich developerzy to pewnie ciemniaki, bo każdy mądry wie, że java jest najlepsza.
Ale dekstop to marny rynek, który na dodatek się kurczy. 95% aplikacji mobilnych i webowych *nie* jest napisanych w C i C .
Eee tam fanboje. Fanbojami się nikt nie przejmuje. Liczy się, czego używają firmy i jakich programistów poszukują.
Wpisz sobie w indeed.com job trends: java, c#, cpp, c, python. ruby, php (nie wkleję linku, bo ten soft do komentarzy jest popsuty i psuje linki).
Który trend jest inny niż pozostałe?
"Ale dekstop to marny rynek, który na dodatek się kurczy. 95% aplikacji mobilnych i webowych *nie* jest napisanych w C i C . "
Tak i okazuje się, że nawet gry na Androida i iOS sa pisane w C++.
"Eee tam fanboje. Fanbojami się nikt nie przejmuje. Liczy się, czego używają firmy i jakich programistów poszukują. "
Jeżeli chodzi o oprogramowanie dla firm, to java rządzi, a w środowisku Windowsowym również .NET – nie ma co do tego żadnych wątpliwość.
C++ zostanie językiem wykorzystywanym do programowania systemowego oraz aplikacji od których wymaga się bezwzględnej szybkości działania czyli np. gier, programów graficznych czy nawet przegladarek itd.
Nie sądzisz, że napisanie Minecrafa w C++ na iOS i Androida,kiedy PeCetowy pierwowzór był w javie, naprawdę o czymś świadczy?
Mówione już było o tym. Aplikacje webowe mają się nijak do desktopowych. Desktopowe mają być szybkie, responsywne i stabilne, a tego Java nie zapewnia. Webowe mają być rozbudowane, fajerkowate, łatwe do zarządzania, ale tutaj wydajność siedzi na 2. planie i tutaj Java czy Python sprawdza się idealnie. Poza tym, gdyby nie programiści C/C++ nie byłoby maszyny wirtualnej Javy, więc przestać gadać, że C umiera. Zawsze będzie ktoś, kto będzie musiał kodzić na niższych warstwach. A Java i C# mają wyższe zainteresowanie, bo tacy programiści mniej umieją, więc można im mniej płacić. Dobry koder c++ jest artystą w swoim fachu, a taki więcej kosztuje.
To webowe mogą nie być szybkie, responsywne i stabilne? Buhaha. Wymagania na szybkość – zwykle znacznie większe, bo jest więcej użytkowników. Responsywność – praktycznie takie same wymagania. Stabilność – gdyby serwerowe były tak stabilne jak większość popularnych aplikacji dekstopowych pisanych w C++, to serwery trzeba by było restartować co kilka minut.
Mogą nie być aż tak szybkie i responsywne, bo tutaj 90% czasu zapytanie klienta – odpowiedź schodzi na przesłanie wyników przez internet. Przecież Google wykorzystuje pythona, który nie jest tak szybki, jak C++, a narzekasz, że Google muli? Nie, wszystko działa szybko i sprawnie, jak na standardy internetowe.
Zdarzyło mi się przez kilka miesięci pracować na Netbeansie (napisanym w Javie). Matko i ojcze, jak to muliło… Po pół godzinie pracy trzeba było restartować aplikację, bo system zaczynał swapować na potęgę (2GB ramu). Obecnie siedzę na napisanym w C++ KDevelopie i mogę mieć go otwartego miesiąc i nic mu się nie dzieje, a jest szybki i stabilny.
Niech zgadnę, napsany w C i C++ Windows zjadł 1.5 GB RAM, 300 MB zjadły inne aplikacje działające w tle (zapewne też w C++ np. przeglądarka), a Netbeans musiał się dusić w pozostałych 200 MB. Przy 2GB RAM to nawet sam Windows 7 z przeglądarką muli, nie trzeba mu nic więcej.
Mnie na 64 bitowym systemie Idea zjada 700 MB RAMu (z 8 GB dostępnych), przy załadowanym projekcie na kilkaset MB bibliotek i kilkaset tys. linii kodu. Poza tym porównywanie KDevelopa z IDE do Javy jest bez sensu, bo mają zupełnie inną funkcjonalność – NetBeans był na tym poziomie co KDevelop ładnych kilka lat temu.
Co do aplikacji webowych, to one muszą obsługiwać wielu użytkowników równocześnie. Aplikacja desktopowa zajmuje się tylko jednym użytkownikiem, więc takie porównania są… zwyczajnie głupie.
Dostępne benchmarki sugerują, że na Javie jest przeciętnie kilkukrotnie większe zużycie pamięci, różnica w prędkości jest faktycznie nieznaczna – przynajmniej w porównaniu do do tego pierwszego.
Wszystko odpalałem na Linuksie, nie używam Windowsa. Gnome z FF zajmował ~500 MB, a top jano mówił, że Netbeans na _starcie_ zżera 1 GB ramu.
Wątpię że poprawnie odczytałeś wskazania top. 😉 www.linuxhowtos.org/System/Linux%20Memory%20Manag…
To nie wiem, co Ty tam w tym netbeansie masz (może -Xmx1g?), ale mnie IntelliJ IDEA na 64 bitach nie wciąga tyle. A jest znacznie bardziej funkcjonalnym IDE.
Wg JConsole:
kod: 160 MB
kod skompilowany: 18.8 MB
sterta (old-gen live mem): 84 MB
sterta (young-gen size): 60 MB
Czyli jakbym chciał przyciąć zużycie pamięci, to mogę zjechać do ok. 400-500 MB, i jeszcze miejsce na działanie GC zostaje, i to przy załadowanym projekcie, a nie na starcie.
Benchmarki uruchamiające hello-world i obliczające, ile RAMu wciągnęła JVM, nie są zbyt wiarygodne 😉
Owszem, Java typowo zżera nieco więcej RAMu, ponieważ sama JVM zjada kilka MB, więcej używa się wskaźników niż w Cpp oraz GC potrzebuje niewielkiego marginesu do działania (ok. 1.5 – 2x dla dobrej wydajności). Ale w Cpp z kolei jest fragmentacja, która też potrafi dochodzić do 2x.
W każdym razie im większa aplikacja, tym bardziej różnice w zużyciu pamięci się zacierają.
Netbeansa używałem na netbooku z atomem i 1gb ramu, nie chodził za szybko ale zajmował 300MB max.
Dało się używać, choć nie było komfortu 🙂
Zobacz sobie MyPaint, napisany w Pythonie, małe cudo 🙂
Co prawda to zupełnie inny kaliber niż Photoshop, ale w swojej klasie jest wyjątkowy.
Do desktopa języki kompilowane nadają się zazwyczaj lepiej, ale są wyjątki gdy program jest duży jak Eclipse, czy Sweet Home 3D i do napisania w C++ potrzebna by była armia programistów.
"Zobacz sobie MyPaint, napisany w Pythonie, małe cudo 🙂 "
Dla uściślenia:
"MyPaint is mainly written in Python (using the GTK toolkit), with a brush engine in C++. "
Engine rysujący jest napisany w C++.
Silniki zawsze pisze się w C/C++ lwjgl też siedzi na OpenGL napisanym w C 🙂
lwjgl to nie silnik tylko wrapper na biblioteki. Tu mowa o silniku który zajmuje się wszystkim na canvas od przechowywania obrazu, przez interpolacje kolejnych punktów kontrolnych po zabawę ze specyficznymi pędzlami i pikselami w ich zasięgu – ogólnie ten silnik zajmuje się wszystkim co w tej aplikacji jest chwalone, a w Pythonie napisany jest tylko UI (który jest największym mankamentem programu). OFC nie znaczy to, że nie da się napisać tego silnika w pythonie, jednak jego ograniczenia wydajności (powolny język interpretowany który dodatkowo na raz może przetwarzać tylko jedną instrukcję i nawet jak rozdzielisz na wątki GIL nie pozwoli na równoległe wykonywanie) pędzle działałyby bardzo słabo, a narysowaną rzecz zobaczyłbyś dopiero po jakimś czasie na ekranie.
"lwjgl to nie silnik tylko wrapper na biblioteki"
A gdzie napisałem że lwjgl to silnik?
Widać, że nie masz żadnego pojęcia o czym piszesz, a już z pewnością nie pisałeś nawet prostego systemiku operacyjnego dla wprawy. Pisząc w C czy C++ system operacyjny nie masz dostępu do żadnych bibliotek standardowych (nawet printf musisz sobie sam napisać i zostaje jedynie składnia – w wypadku C++ masz po prostu programowanie obiektowe i to jest główna różnica). Zarządzanie wielowątkowością w Windowsie jest znacznie gorsze, ale nie ze względu na język, a gorszą implementację SMP, znacznie gorzej działający scheduler itp. i to wyszło w testach.
Java jest z natury wielowątkowa (ma tysiące innych wad, ale to jest jedna z nielicznych zalet ;p), ale C/C++ z OpenMP wcale wiele nie ustępuje, a zapominasz, że dziś wielowątkowość na CPU to już mało interesująca kwestia – dziś kod musi iść na wiele wątków CPU i wiele wątków GPU, a także innych urządzeń jak DSP.. Tu wkracza już OpenCL z językiem C-like, DirectCompute i Cuda z czymś pomiędzy C i C++, a jeśli nie chce się ktoś zagłębiać na tak niski poziom to pisze w C/C++ i tylko pisze dyrektywę dla kompilatora w C++AMP od Microsoftu lub OpenACC (Nvidia + spółka) i banalnie łatwo mówi się kompilatorowi, że dane instrukcje ma wykonać równolegle np. na GPU.
XNA to nie jest przykład odchodzenia od C++, a api dla gierek które zatrzymały się w czasie 10 lat temu i Microsoft daje darmową możliwość programowania dla Xbox 360 za pomocą XNA dla tych prostych gierek, aby uzależniać początkujących programistów i za darmo zyskiwać aplikacje dla swoich innych platform jak Windows Phone (dla którego specjalnie nikt nie chce pisać, ale kod zarządzany obsługuje więc gry XNA odpali, bo proste gierki mają wymagania tak niskie, że telefony dają radę).
Inna sprawa to gry AAA i tu wszyscy kochają C++ i nikt nawet nie pomyśli o innym języku do silnika gry (a Microsoft tu też nie odpuści (podobnie jak Nintendo i Sony) i nie da SDK za darmo, bo te gry mają gigantyczne zyski i za DevKit twórcy muszą płacić). OFC sama logika gry nie jest pisana w C++, a w C++like języku skryptowym (im bardziej C++like tym bardziej popularny w grach).
Minecraft i nowo powstające silniki do gier w Javie czy C# obalają twoją teorię w trymiga.
C++ jest wciąż używany bo starzy wyjadacze wciąż go używają, bo im się nie opłaca tworzyć w czymś czego nie znają.
Nawet Python ma się czym pochwalić: http://www.yofrankie.org/
Napiszę jeszcze raz. Wydajność układów jest tak dobra, że C++ może już sobie zdechnąć. Na pewno nikt o zdrowych zmysłach za kiepskie pieniądze nie będzie pisać systemu bankowego w C++. W Javie natomiast napisze. 😉
Minecraft to gra indie małego studia i to nawet żadna jaskółka. Co do innych silników to zawsze były silniki w innych językach do prostych gierek, ale to nie zmienia faktu, że to amatorskie projekty przeważnie zupełnie nieprzemyślane.
C++ używają starzy wyjadacze, którzy przeważnie znają Pythona, Javę, D i inne języki, a nawet te języki współtworzą, lub są autorami własnych, ale to, że dany język jest fajny do jednego, nie oznacza, że w innym zastosowaniu się sprawdzi – tam gdzie wydajność jest ważna nic się nie sprawdza tak dobrze jak C++ + wstawki ASM.
Co do YoFrankie, to ta gra (za dużo powiedziane – to jest PoC) powstawała na 2ch silnikach – Crystal Space (C++) i Blender Game Engine (C++) – kod drugiego możesz znaleźć tu: https://svn.blender.org/svnroot/bf-blender/trunk/… i z Pythonem ma tyle wspólnego, że python odgrywa tu rolę… języka skryptowego (tak jak w UnrealEngine jest UnrealScript, czy w CryEngine korzystają z LUA – silniki są w C++, a język skryptowy to tylko logika która wykonuje kod napisany w C++).
Wydajność jest tak dobra, że każdy program praktycznie jest pisany w C++ i większość musi robić wstawki nawet w ASM, a jedynie bało ważne warstwy aplikacji od których nie zależy wydajność mogą korzystać z innych języków.
Zależy co masz na myśli przez system bankowy – jeśli aplikacja dla pracowników banku pobierająca dane z serwera baz danych i przesyłająca tam dane to JAVA jest jak najbardziej dobrym wyborem i to lepszym niż C++ (nie ze względu na wygodę, a wycieki pamięci, bo w tego typu aplikacji wydajność można olać), jednak jakbyś chciał napisać ten serwer baz danych z którym się komunikujesz w JAVIE to by cię pochlastali, bo nie zdołałby odebrać małej części zapytań serwera napisanego w C++ i co więcej nie miałbyś nawet wielkiego pola manewru w optymalizacji.
No, to tu już polałeś na całej linii. Sprawdź sobie w czym są napisane systemy baz danych, na których chodzą takie serwisy jak: Facebook, Twitter, Amazon, Reddit, LinkedIn. Albo jakich systemów baz danych używa WalMart. Obecnie się tak śmiesznie porobiło że systemy baz danych pisane w C++ mogą się schować z wydajnością przy tych pisanych w Javie.
Podane strony korzystają z wielu baz danych, ale większość mają zapisane w serwerze SQL pisanym w C/C i przyspieszają dostęp do niego za pomocą Memcached napisanym w C, ale faktycznie korzystają część danych przechowywana jest w okrojonych bazach NoSQL jak Apache Cassandra czy Amazon DynamoDB napisanych w Javie, Jednak bazy NoSQL w bankach nie są mile widziane i tu króluje niepodzielnie Oracle (który znowu na stronach internetowych nie ma nic do gadania).
Przykładowo podany Facebook ma główną bazę danych MySQL i pomaga mu Memcached, a Casandra jest używana jako baza pomocnicza do powiadomień i tego typu zadań.
Facebook używa też PHP 😉
Plują sobie w brodę że od razu nie poszli w Javę. Pewnie byli tam fanboye PHP i tak jak tobie nic im się nie dało przetłumaczyć.
W PHP jest napisana strona, a nie serwer, a na niego raczej nie narzekają, bo u nich PHP to nie język skryptowy i Facebook ma własny kompilator dla PHP, który przetwarza kod PHP, na bardzo zoptymalizowany kod w C++ i kompiluje go do kodu natywnego i działa to znacznie wydajniej niż kod w JSP. OFC kod JSP jest bardzo fajny i jeśli jesteś małą firmą która nie ma dostępu do wykonywania FastCGI na stronie, a akurat masz JSP to lepiej wybrać JSP, bo JSP jest bardzo fajne.
Zapominasz, że generuje badziewny kod C++, no ale wciąż lepszy od PHPa . 😉
Ponoć ten kompilator przyspiesza kod jedynie o około 50%, to bardzo opłacalne dla nich, ale i tak daleko mu do wydajności takiego Foresquare napisanego w Scali.
Faktycznie Spring i Hibernate nie dają dużo wydajniejszych aplikacji czysto webowych, a zwykły JSP jest jeszcze wolniejszy. Dużo wydajniejsze są takie rozwiązania jak Play i Lift.
@jkl
"Plują sobie w brodę że od razu nie poszli w Javę. "
Ciekawe, bo np. Grono.net było w javie i uciekli do Pythona i Django.
Django to Java inteligencie.
"Django to Java inteligencie"
no comment
Faktycznie myślałem że to działa w oparciu o PyPy co by sugerowało na podobieńtwo. Niestety okazuje sie ze ta kicha to jednak prawdziwy zamuł.
Jeśli chodzi o SQL, to Javowe H2 czy HSQLDB to są wydajniejsze od MySQL. Poza tym silnik MySQL jest napisany w C, nie w C++. Przejrzyj sobie źródła.
Nie zmienia to faktu, że jest jakaś przyczyna dla której nowe chmurowe systemy baz danych głównie pisze się w Javie, a te pisane w C++ się nie przyjęły (np. HyperTable reklamowało się, że *ponieważ* jest pisane w C++, to jest szybkie no i poniosło sromotną porażkę – wcale nie okazało się szybsze, a tym bardziej stabilne i funkcjonalne).
Dla mnie Java i C++ to wydajnościowo ta sama liga. Oba mają pewne słabe i mocne strony odnośnie wydajności, jednak średnio w dużej aplikacji wydajność wychodzi zwykle dosyć podobna. Jeżeli jest różnica większa niż 25%, to bym już raczej szukał gdzie kod jest źle napisany, a nie winił języka / kompilatora / środowiska.
Tylko że w Javie a szczególnie w jej wersji dla power-userów, czyli Scali, dodatkowo pisze się wielokrotnie szybciej, są lepsze narzędzia programistyczne, i to przeważa.
A czy ja pisałem, że MySQL jest wydajny? MySQL jest tylko popularny, a wydajnościowo to jest inna liga niż PostgreSQL czy Oracle. Ja pisałem czego używa Facebook, bo wbrew temu co mówiłeś korzysta on głównie z MySQL.
Chmurowe bazy danych pisze się głównie w C i Cpp bo używane w chmurach głównie dziś są bazy SQL.
To o czym mówisz to bazy NoSQL i te dziś są pisane zarówno w Java jak i Cpp – NoSQL to w bazach nowe podejście do tematu i po prostu jeszcze tak naprawdę wszystkie rozwiązania to jest wersja beta, ale tu też nie ma takiej dominacji Javy:
– Google LevelDB (Cpp)
– MongoDB (Cpp) – bardzo popularna baza NoSQL (korzystają z niej m.in. bit.ly, MTV, New York Times, Disney, Guardian, Forbes, SourceForge, GitHub, ElectronicArts)
– memcached (C) – Facebook, Twitter, YouTube, Reddit
Java to wydajnościowo liga niżej niż Cpp, i ta sama liga co C# – co nie jest źle bo później jest przepaść i dopiero języki skryptowe.
Nie ma dominacji Javy, bo wypisałeś sobie kilka znanych Tobie baz danych i nie wypisałeś baz Javowych? Ok, Java może nie dominuje na tym rynku, ale i tak Java i C# są znacznie częściej wybierane niż C i C++. Wystarczy popatrzeć na tę listę: http://en.wikipedia.org/wiki/NoSQL
No i memcached to nie jest pełnoprawna baza danych. Twitter i Reddit używają Javowej Cassandry do składowania danych, memcached jest tylko jako warstwa buforowania.
Nie ma dominacji i podałem bardzo popularne przykłady potwierdzające to. To, że na wiki jest lista 100 nikomu nieznanych i nigdzie nie używanych baz gdzie większość z nich jest napisane w Javie (ale są i takie w C++) nie zmienia faktu, że żadnej tu dominacji nie ma.
Memcached jak każda baza NoSQL to nie jest pełnoprawna baza danych, a bardzo obcięta, do bardzo specyficznych zastosowań (przez swoje wyspecjalizowanie może działać tak szybko).
O tym, czy coś jest bazą danych, czy nie, decyduje przede wszystkim zapewnienie trwałości danych. Baza danych musi umieć składować dane. Memcached tego nie umie, nie jest więc bazą danych. Memcached jest cachem. Samodzielnie na nim nic nie zbudujesz, musisz mieć pod spodem bazę danych. Cassandra, HBase, Amazon Dynamo zapewniają trwałość i spójność danych, są więc bazami danych i można na nich oprzeć cały serwis samodzielnie (zresztą memcached przynajmniej w przypadku cassandry nic nie daje, bo sama cassandra potrafi robić dokładnie to samo co memcached).
"Chmurowe bazy danych pisze się głównie w C i Cpp bo używane w chmurach głównie dziś są bazy SQL. '
Piszesz bardzo z własnej perspektywy. Rozejrzyj się trochę szerzej. Jest dokładnie na odwrót, chmury korzystają z baz NoSQL, bo te lepiej się skalują i są wydajniejsze, a że mają działać na różnych maszynach to lepiej pisać je w języku takim jak Java.
Widzisz chmury przez pryzmat kilku portali, a obliczenia w chmurze to ogromy rynek o wieloletnich tradycjach. NoSQL są dalej małą częścią z baz SQL używanych w chmurach, a to że się lepiej skalują to fakt, ale w wielu sytuacjach do niczego się nie nadają (to są NoSQL czyli poobcinane bazy danych specjalizowane do bardzo specyficznych działań).
W takim Amazon pod spodem i tak siedzi baza NoSql, która dzięki oprogramowaniu może emulować MySQL. Jak sobie zainstalujesz na wirtualnej maszynie na Amazonie bazę SQL to będziesz ją miał.
Tym stwierdzeniem pokazujesz, że kompletnie nie wiesz co to jest NoSQL. Nic tam nie jest poobcinane ani specjalizowane.
"Tym stwierdzeniem pokazujesz, że kompletnie nie wiesz co to jest NoSQL. "
Jeżeli chodzi o funkcjonalność można spokojnie użyć takiego zwrotu. Zapytania sprowadzają się do pobrania odpowiednio zindeksowanych danych.
Odpowiadanie na zapytania to podstawowa funkcja systemów informacyjnych. Zarówno NoSQL jak i SQL to robią. Nie widzę co niby jest poobcinane. Są po prostu… inne. A Ty sugerujesz, że bazy NoSQL oferują jakiś podzbiór funkcji RDBMSów. Nie, to nie jest podzbiór. NoSQLe oferują funkcje, których próźno szukać w RDBMSach i bardzo wiele funkcji, które w RDBMSach typowo są (niektóre oferują nawet SQL). NoSQL = Not Only SQL, a nie No SQL.
"Dla mnie Java i C++ to wydajnościowo ta sama liga."
Na desktopie da się bez problemów odczuć mulenie programów napisanych w javie – dlatego jest ich tak mało, bo ludzie ich po prostu nie lubią.
Mulenie to jest związane ze startem maszyny wirtualnej. To tak jakbyś startował MSOffice przez VirtualBoxa. Po załadowaniu chodzi natywnie i nie ma żadnych zamuł. Kolejne uruchomienia są już szybsze.
Kolejna sprawa: C# jest wyraźniej wolniejszy od Javy a ludzie i tak zarzekają na Javę. Zamulanie Javy to dziś mit.
No niestety Java na Windowsie jest wolniejsza niż C#, podczas gdy na Linuksie jest dokładnie odwrotnie.
Na linuksie też java byłaby wolniejsza gdyby była pełnoprawna implementacja C#, bo Mono ssie.
http://gwan.ch/en_linux.html
Masz tu jeden z powodów dlaczego Windows jest taki powolny. Gość Zna się na ASM i C (robił w tym od kilkunastu lat). G-Wan to serwer servletów pisanych w C (doszły ostatio inne jezyki). Nie jest open source (jego główna wada i dlatego go nie używam), ale jest za free.
Nie wiem na ile się zna, bo ja go nie znam, ale dochodzi do błędnych wniosków (z tymi rdzeniami) – Linux też spowalnia w userspace i przykładowo mój sterownik do wirtualnego systemu plików działał wielokrotnie wolniej w FUSE niż bezpośrednio w jądrze. to rzecz jasna – to naturalne, że zadania jądra mają najwyższy priorytet wykonywania dla Schedulera, a programy w zależności od fokusa, ustawionego priorytetu i algorytmu schedulera się dzielą resztą czasem procesora. A to, że pod względem schedulera jądro Linuksa wymiata to daje znacznie lepsze rezultaty niż ten sam program na Windowsie.
"http://gwan.ch/en_linux.html
Masz tu jeden z powodów dlaczego Windows jest taki powolny."
Windows nigdy nie był projektowany do masowego zapodawania stron wyświetlających "Hello word" – Ubuntu jak widać jest od tego specjalistą w tego typu testach.
Ale co to za system który nawet zHello World sobie nie radzi?
Od "hello word" mamy linuksa, Windows dobrze sobie radzi z DirectX oraz AD oraz kilkoma tysiącami programów, których nie ma na linuksa i to jest w zupełności wystarczające.
No jakby Windows sobie nie radził z DirectX i AD to by był dopiero przypadek 🙂
Natomiast Linuks radzi sobi z innymi programami których nie ma na Windowsa.
"Na linuksie też java byłaby wolniejsza gdyby była pełnoprawna implementacja C#, bo Mono ssie."
Mono faktycznie jest nieco mniej wydajne niż .NET, ale to głównie wersja Javy na Windows jest powolna.
Opal sobie na tej samej maszynie benchmarki z http://shootout.alioth.debian.org na Windowsie i na Linuksie to zobaczysz. Windows jest ogólnie sporo wolniejszy dla programów w C++ (choć tutaj duże znaczenie ma optymalizacja przy kompilacji), ale .NET jest niewiele szybszy od Mono, za to Java na Linuksie jest dużo bardzie wydajna.
Windows jest powolny, bo ma duzy narzut w user mode (ok. 300%). Apache działa 3x wolniej niż IIS (który działa w kernelu dla wydajności). Gdyby IIS działał w user mode na serwerach to MS by zdechł.
Moja żona, która nie jest informatykiem, nawet nie wie, które aplikacje przez nią używane są napisane w Javie, a które nie. A używa jednych i drugich.
Nigdy się nie skarżyła na powolne uruchamianie czy zamulanie Javowych aplikacji (JabRef, gry na kurniku), a ma prawie 5-letniego kompa. Skarży się za to na mułowatość i kiepską stabilność ArcGIS, napisanego w Cpp i kosztującego bajońskie pieniądze.
Co do tego, czy inni nie lubią Javy, to duża popularność programów takich jak Azureus, JDownloader czy Minecraft obala Twoją tezę.
"Co do tego, czy inni nie lubią Javy, to duża popularność programów takich jak Azureus, JDownloader czy Minecraft obala Twoją tezę. "
Programy, które wymieniłeś są pojedynczymi popularnymi programami napisanymi javie – jedna jaskółka wiosny nie czyni :).
Kilka ciekawych opinii o JDownloader: http://www.dobreprogramy.pl/JDownloader,Program,W…
Wniosek nasuwa się sam: Windowsowcy średnio zadowoleni lub wcale, linuksiarze wniebowzięci – wiadomo dlaczego, bo z braku porządnego oprogramowania, rzucają się na wszystko na szczerbaty na suchary 🙂
"Wniosek nasuwa się sam: Windowsowcy średnio zadowoleni lub wcale, linuksiarze wniebowzięci – wiadomo dlaczego, bo z braku porządnego oprogramowania, rzucają się na wszystko na szczerbaty na suchary 🙂 "
Zbyt pochopnie wyciągasz wnioski. Java na Linuksie jest znacznie wydajniejsza niż na Windows, stąd inne wrażenia.
Java na Windows jest równie wydajna co na Linuksie, tylko trzeba sobie JDK ściągnąć i odpalać z flagą -server. Albo po prostu zainstalować 64-bitową Javę, bo tam jest chyba domyślnie tryb server, niezależnie od systemu.
ArcGIS to chyba trochę inna liga niż gry na kurniku. Spróbuj takie coś napisać w Javie, dopiero się będzie skarżyć.
JDownloader jest małym programem, więc Java tutaj nie muli, ale Minecraft jest po prostu grywalny i mój brat, l. 9, skarży się, że mu ścina jak nieboskie stworzenie na jego laptopie, pomimo, że najnowsze gierki śmigają aż miło.
@jkl
Acha, powinieneś sobie jeszcze zdawać sprawę, że z (rzekomego) faktu pisania Windowsów w C++ nijak nie wynika to co piszesz. Co najwyżej wynika z kombinacji projektu i konieczności zapewnienia kompatybilności wstecznej.
"Testy z którejś gazetki" – no no… widzisz,
Kernel panic na linuksie ? Żadna nowość.
I nie, Java automatycznie nie zrównolegli Ci programu (choćby dlatego, że niektórych problemów zwyczajnie się nie da, niezależnie od języka).
Co najwyżej JIT zrobi inline najczęściej wywoływanych funkcji i skompiluje je do kodu natywnego.
Twoja wpowiedź to mieszanina ignorancji, chciejstwa i uprzedeń.
Ale zrównolegli zarządzanie pamięcią i zoptymalizuje blokady w kodzie wielowątkowym. Tego żaden kompilator C++ nie potrafi.
Natomiast jeśli napiszesz program w Scali z użyciem kolekcji równoległych, to owszem, zrównolegli (a z użyciem ScalaCL nawet na GPU). Powiedzmy, że półautomatycznie, bo programista nadal musi użyć kolekcji równoległych zamiast zwykłych.
@jkl, nie pomagasz swojej sprawie, raczej się ośmieszasz, bo wygląda na to, że coś tam wiesz, ale jednak nie do końca 😉
Nie będe odpowiadać rzeczowo na trolling. Za wykłady tutaj nikt mi nie zapłaci. Co najwyżej odstraszę trolla i nie będzie już odpisywwl więc będzie nudno. Mogłeś mu nie odpisywać bo teraz nic nie napisze. Za ten jeden koment o Scali jes już pól roku do przodu bo nie musi sam sprawdzać.
Swoją drogą ciekawi mnie zjawisko masowego wypływania w dyskusjach trolli z windowsowego podwórka.
Przede wszystkim wszelkiego rodzaju sortowania mogą być w Javie wykonane na wielu rdzeniach out of the box i bez bólu głowy.
W C++AMP czy C++ z kompilatorem OpenACC możesz sortowanie wykonać nawet na GPU dodając jedną linijkę, a w Javie miałbyś ból głowy.
Kod da się przenieść na Linux, Mac z tego AMP bez przeróbek?
Podstawowe pytanie. 😉
Jak tylko kompilatory będą to wspierać (AMD zapowiadało, że planuje dodać wsparcie w kompilatorach dla innych platform), ale ze względu na bliskie powiązanie C++AMP z DirectCompute (który można zastąpić OpenCL ofc w innych implementacjach) podałem OpenACC który z kodu C++ w taki sam sposób jak AMP tylko kompilator "przepisze" kod C++ w fragmentach OpenACC na CUDA/OpenCL i wywoła go z miejsca w którym miał być wykonany, bez względu na system czy firmę.
AMD może sobie zapowiadać, nawet dobrych procków nie robią. Nadchodzi era ARM. Kod z C i C++ oraz biblioteki staną się bezużyteczne.
Zabawne, bo właśnie na ARM C i C++ rządzą i poważnych grach na Androidzie nie da się nie używać NDK i C++ (podobnie iOS z Obj-C i grami które linkują się do kodu C++). Na androidzie tylko proste programy korzystają z Dalvik, przez co Intel wchodząc na tablety z Androidem dziś musi pisać emulator ARM, żeby uruchomić aplikacje i gry korzystające z NDK. Za to dzięki ARM i GPU nadchodzi nowa era faktycznie – era OpenCL, bo GPU w telefonach już potrafią wykonywać kod OpenCL, podobnie jak ARM to potrafi, czy konsole jak PS3. Kod wieloplatformowy będzie musiał zejść niżej do OpenCL, ale pozostanie jednak natywny i w będzie można przygotować wersje dobrze zoptymalizowaną w formie binarnej (a jeśli, żadna binarka nie będzie kompatybilna to kompilować w locie przed uruchomieniem).
Wszystkie gry na Androida są pisane w Javie. To o czym piszesz to JNI które pozwoliło na użycie już istniejących bibliotek.
Dlwczego tu szpanujesz tym OpenCL? Jesteś jednym z twórców? Są bindingi dla Javy do OpenCL więc znów nie widzę powodu by zniżać się do C++.
To że OCL jest w C/C++ nie jestżadnym argumentem za tym językiem.
Dobre. Wszystkie poważniejsze gry na Androida są pisane w C++ w NDK. Część używa Javy do stworzenia kontekstu w EGL (Androidy przed 2.0) i obsługi dźwięku (Androidy przed 2.3), teraz gry zupełnie są pozbawione Javy i nie mają napisane w niej ani linijki – gry korzystają z Native Activity, dźwięk jest dostępny z poziomu C++ (OpenSL ES – wcześniej tylko z Javy i MediaPlayer). Ostatnia rzecz jakiej programistom brakowało w NDK to sprzętowe dekodowanie video do którego API było tylko w Javie (MediaPlayer), ale od Android 4.0 jest OpenMAX AL.
Jakie szpanujesz? OpenCL to po prostu obecnie najbardziej uniwersalny sposób obliczeń na wszelkiego rodzaju sprzęcie, a dziś obliczenia idą w kierunku masywnej wielowątkowości.
OFC, że masz bindingi do Javy tylko wtedy już nie piszesz programu w Javie (tu tylko odczytujesz dane i je przekazujesz do faktycznego programu), a piszesz go w OpenCL lub podobnych językach (CUDA) i masz języki na poziomie C/C++ i o bardzo wysokopoziomowych językach możesz tu zapomnieć.
Obliczeń czego i na czym? Ciągle się słyczy o tych cudach i jakoś żadnego pożytku z nich nei ma poza jakimiś akademickimi gdzei śmietankę spoja bardzo wąskie grono.
Rynek mobilny to przyszłość i kasa, nie cuda.
Obliczeń wszystkiego i na wszystkim ;]. Jeśli coś pasuje na CPU to wrzucasz na CPU (a działania na wbudowanych wektorach korzystają automatycznie z jednostek wektorowych), jeśli na arch GPU to wrzuca na GPU i działa tam. Pożytek jest jasny i to nie w żadnych akademickich projektach tylko dla zwykłych użytkowników.
– Edytujesz wideo? Sony Vegas Pro, Final Cut czy inny program to wykorzystujesz OpenCL do kodowania, dekodowania, efektów i wszelkiego typu obliczeń
– Tworzysz grafikę komputerową? Renderujesz wielokrotnie szybciej za pomocą LuxRender (OpenCL), iRay (CUDA), VRay RT (OpenCL), Indigo (OpenCL/CUDA), Arion (CUDA), Cycles (CUDA/OpenCL)…
– Edytujesz zdjęcia w Photoshopie to korzystasz z akceleracji GPU (ba nawet w GIMP portowany jest GEGL do OpenCL i przygotowana infrastruktura pod przenosiny obliczeń, filtrów itp na GPU).
– Grasz w gry? PhysX ma akcelerację CUDA, Bullet jest portowany do OpenCL. Dodatkowo w grach dla przyspieszenia efekty postprocess (DoF, HDR, DS…) są przenoszone do OpenCL/DirectCompute.
To są bardzo realne zastosowania, które są już na rynku mimo, że dobre implementacje OpenCL są od bardzo niedawna.
Rynek mobilny to faktycznie przyszłość, dlatego większość producentów mobilnych wydaje GPU ze wsparciem dla OpenCL (ARM wydaje Mali 6xx z OpenCL, Nvidia ma wydać Tegra 4 z OpenCL i CUDA (oraz wsparciem obliczeń na GPU w PhysX który jest najpopularniejszym silnikiem fizyki w mobilnych grach), PowerVR ma już od jakiegoś czasu wsparcie dla OpenCL, podobnie jak ZiiLabs (creative) – ten ostatni producent wręcz zrobił zamiast GPU procesor DSP, który "emuluje GPU" z 96 rdzeni programowany z OpenCL).
Piszesz o zastosowaniach tak niszowych jak komercyjne loty w kosmos. Na chwilę obecną nie da się tego zamienićna dolary.
Moda na karty graficzne wymagające elektrowni się kończy.
Programy graficzne, obróbka filmów oraz gry nie należą do zastosowań niszowych tylko popularnych.
Najpopularniejsze zadania profesjonalne (graficy, projektancki, dekoratorzy, inżynierowie, filmowcy czy amatorzy obrabiający filmy z wakacji/ślubu/innej uroczystości, fotografowie (amatorzy obrabiający zdjęcia z wakacji jak i profesjonaliści) – poza tym dochodzi masa oprogramowania medycznego korzystającego z CUDA/OpenCL) jak i rozrywkowe (gracze) to nisza, a systemy bankowe popularne… to się porobiło.
Bosz. Oprogramowanie medyczne w cpp. Pewnie jeszcze na windows?
Spoko, to pewnie tylko do wizualizacji.
Nie w C++, a w CUDA i jest takiego oprogramowania mnóstwo (bo CPU są za wolne i trzeba robić na GPU).
Ciekawe jak na GPU jeden z kilkuset procków się dogrzeje i zaczną wychodzić artefakty. 😀
Flat line na 100%. 😉
GPU są przystosowane do pracy w cieple i nie częściej zobaczysz tu artefakty niż na przegrzanym procku/ram, ale jeśli chcesz na serwery i mieć pewność to są karty profesjonalne (stosowane m.in. właśnie razem z CUDA w medycynie) z pamięciami z kontrolą błędów.
Piszesz, ze CUDA pilnuje rozmiarów tablic? 😉
Poza tym po co rzeźbić w C++ skoro równie dobrze można pisać w C#? AMP wymyślił MS i na pewno bindingi posiada.
Edit:
Sprawdziłem. posiada. Wiec po ki grzyb męczyć sie z C++?
Bzdura – AMP może być użyty tylko i wyłącznie z C++ – przeczytaj dokładniej jak może być użyty w C# – możesz napisać w C++ bibliotekę korzystają z AMP i z poziomu C# wywołać kod który napisałeś w C++ AMP (to jedyny sposób na AMP w C#). Bindingi mogą być na bibliotekę, ale tu mowa zupełnie innej sprawie (tu nie ma mowy o funkcji wywoływanej z biblioteki do której można sobie bindować, a o dyrektywie preprocesora).
Skoro się nie da to kiepski z tego wynalazek.
Nie ma cię w C# – nie istniejesz. Btw nie jestem zwolennikiem C# – to dobry język ale na cienkiej platformie.
kolekcja.par.sortWith(komparator);
Oh, rzeczywiście straszny ból głowy. Tylko trzeba sobie zaimportować scala.collection.parallel. Działa zarówno w "czystej" Javie jak i Scali.
Chciałem zapytać czy widziałeś wydajność scala.collection.parallel? Jeśli działa na GPU to jest wolniejsze niż jeśli działa na CPU (nie wiem jak to zrobili, że względem OpenCL potrafi na GPU być tysiące razy wolniejsze od implementacji w C++ i OpenCL (dane z papierka GPU PARALLEL COLLECTIONS FOR SCALA)). Szczerze to dopiero ból głowy, że tak to działa i wolałbym już napisać wszystko od zera w ScalaCL chociaż przez narzuty JNI spadek wydajności jest i tak spory względem C++
Używam w praktyce i nie zauważyłem narzutów. Na CPU skaluje się dobrze. Ale na GPU nie testowałem, bo na razie ScalaCL jest alpha.
Powoływanie się na czyjąś magisterkę, która nawet kodu źródłowego w całości nie podaje, i wyciąganie daleko idących wniosków jest bez sensu.
Zarówno C jak i C++, jak na multum zastosowań mają niewiele w bibliotekach standardowych, więc w praktyce ich przenośność wygląda podobnie. narzut C++ to przeważnie mit. Prostota C w porównaniu do C++ to też mit. (chodzi o uzywanie a nie nauczenie się w 3 dni – tu C wygrywa). Języki wyższego poziomu tez sie na przenoścności przejechały ze względów politycznych. np. głupi język znaczników – HTML przez całe lata z powodu wojny przeglądarkowej był nie w 100% przenośny, w SQL też trzeba uważać.
Co to jest "tutorial"? Chodzi o podręcznik tylko pisany polglishem mundrych gimnazjalnych informatyków, którzy sami ledwo opanowali temat?
Małe widze masz doświadczenie w programowaniu.
Kompilator do C to kilkaset kb. Prosta składnia i 100% gwarancja jednakowego działania wyplutego kodu maszynowego.
W przypadku C++ co kompilator to inna wspierana część standardu. Zawsze coś nie działa jak należy. A jak się dołoży kulawe biblioteki to mamy niezłe siano. Myślisz dlaczego Jądro Linuksa jest pisane tylko w C?
Widzę, że masz duże doświadczenie w programowaniu w C. Mówisz o 100% gwarancji jednakowego działania kodu maszynowego… Możesz mi powiedzieć, jakimi kompilatorami da się uzyskać jednakowo działające jądro Linuxa?
Osobiście nie znam kompilatora w pełni zgodnego nawet z C (tym bardziej, że języka C jest kilka wersji (ba nawet z )), a co dopiero C++. Podobnie jest z Javą gdzie wersja X nie jest kompatybilna z inną , a jeśli chcesz używać implementacji Java innej niż Sun/Oracle (nawet OpenJDK) to boli… jeszcze gorzej wygląda sprawa z .NET i Mono.
Co do kodu wyplutego masz rację i jeśli ktoś chce udostępnić bibliotekę tylko w formie binarnej to C++ odpada (nie ma standardu zapisywania obiektów w bibliotekach i jeśli kod biblioteki jest obiektowy do jeden kompilator kodu drugiego nie przeczyta).
Co do jądra linuksa to jest pisane tylko w C, bo ponad 20 lat temu rozpoczęto go pisać w C – mieszanie języków i wprowadzanie teraz obiektywności do części, a do innej nie to byłby koszmar (bo sprawa zapisywania obiektów w kodzie tutaj nie ma znaczenia, bo kompiluje się wszystko za pomocą GCC, a kod jądra z tego co pamiętam nawet teraz w C nie chce się kompilować w innych kompilatorach jak ICC). Gdyby Linus napisał pierwszą wersję w C++ to do dziś by go stosowano i nie byłoby mowy o włączeniu innego języka, a tym bardziej przepisaniu wszystkiego od nowa.
O tym właśnie pisałem. C jest bardziej przewidywalny od C++. Nie posiada takiego narzutu oraz posiada kompletną dokumentację oraz implementację w zależności od wersji. W przypadku C++ w jednym miesiącu jest tak a w drugim inaczej. C++ nie jest zgodny nawet sam ze sobą ani w wersji binarnej ani w postaci kodu. Dlatego profesjonaliści piszą w C a nie C++. C++ to taki PHP – bierzesz pierwszy lepszy kod i widzisz siano.
Przykładowo ciągle powstają nowe silniki gier. I prawie wszystkie (lepsze) są pisane w C++ i pisane od 0. Żonglują bibliotekami jak chcą. Żadnej standaryzacji.
Upada framework – wydaje się go jako Open Source a i tak nikt w tym sianie nie chce grzebać. Pełno tego śmiecia w necie. Co innego C i Java. Zawsze da się coś powtórnie wykorzystać.
Kolejny przykład: WinRT od MS. Całkiem nowe API. Oczywiście w C++ i napisane od 0. 😉 MS musiał wydać nowe API, bo stare się nie nadaje (pisane w pięknym C++). 😉
To jest prawdziwy obraz tego języka a nie to, że da się zejść do poziomu C w razie W.
BTW. Opisano już nowy standard c++ i są do tego kompilatory czy jest o staremu, że doczeka się za 10 lat.?
Słowo daję większego śmiecia niż c++ nie widziałem. A dużo widziałem.
bzdury, API windowsa jest w C, a zalążek obiektowości w API jest uzyskiwany przez COM.
Posiada podobny narzut jak C++ (tylko nieliczne, bardzo specyficzne konstrukcje w C++ mają duży narzut, ale każdy programista C++ wie o nich), posiada tak samo kompletną specyfikacje jak C++ i mimo swoich lat każdy kompilator ma swoje specyficzne zachowania i kod C zgodny ze standardem może się nie kompilować, a jeśli już się kompiluje nie ma pewności, że będzie działał tak samo jak w innej (tak jest ze wszystkimi językami, czy to wyżej czy niżej poziomowe (ASM jest tu mistrzem ze swoimi dialektami ;p)).
Ciągle powstają nowe silniki, bo zmienia się technologia, zmienia się sprzęt i jego API, zmienia się moc. Silniki prawie nigdy nie są pisane od zera (nowe to praktycznie zawsze ewolucja poprzednich wersji). Nie rozumiem o co chodzi Ci z żonglowaniem bibliotekami? Biblioteki dobiera się takie jakie są najlepsze do osiągnięcia celu i nie wiem co w tym można widzieć złego.
Nie widziałem upadającego frameworka, a tym bardziej silnika… za to wiele razy jak już się silnik (dana wersja) zestarzał i nie nadawał się już do sprzedaży, bo nikt na tym gry komercyjnych nie będzie robić to się wydaje jak id Tech wydaje swoje silniki (kiedy już po prostu się zestarzeją i techniki wykorzystywane w silniku wyjdą zupełnie z użycia, bo sprzęt się przez lata zmieni (przykładowo silnik Doom3 opublikowany ostatnio ma wolumetryczne cienie – dziś w grze byłyby wyśmiane bo stosuje się miękkie shadowmapy VSM, a jeśli światło słoneczne to dochodzą jeszcze kaskady, szkieletowa animacja na CPU pozwalająca na kilka postaci na scenie, kiedy dziś wszystko robione jest przez GPU co pozwala na wszystko animowane bez ograniczeń prawie, oświetlenie per pixel dla max kilku świateł, kiedy dziś stosuje się shadery postprocess i oświetlenie jako postprodukcja per texel w deffered shading…)) – silniki gier się na tyle zmieniły, że ten silnik nadaje się jedynie do muzeum i aby dogonić dzisiejsze techniki generowania obrazu wszystko musi iść do kosza i być napisane jeszcze raz (to nie zależy od języka).
Kolejny przykład jest wręcz boski… Zmieniono zupełnie serwer wyświetlania i zupełnie przebudowano okienka, co musiało mieć wpływ na API, ale to nie jest api dla C++, a dla .NET, JavaScript i C++, a to, że WinRT musiał być pisany od zera to tylko dlatego, że w MS nie przemyśleli wcześniej sprawy API dla .NET z WinForms, którego WinRT właśnie jest następcą.
C++11 to świeża specyfikacja, ale implementacje bardzo szybko się rozwijają – więcej informacji na temat aktualnego wsparcia masz tu: http://wiki.apache.org/stdcxx/C%2B%2B0xCompilerSu…
Zmieni się moc, API, super. Tylko to mnie w przypadku Javy i CLR nie interesuje. Kod tan sam. Dla Javy lepiej bo i na innych systemach odpalam. Biorę jar-a z 1997r. i działa bez mydła. Ile to już frameworków i innych cudactw w C++ powychodziło?
Co innego goły C. Proszę bardzo: http://gwan.ch/en_linux.html (Windows C++) vs (Linux C)
To mówi samo za siebie. Twórca serwera nie wydaje już wersji na Windows bo ten system przegrywa o rząd wielkości w testach.
W wypadku Javy też musisz mieć nowe API UI bo obecne nie jest dostosowane do obsługi palcami i gestami, wielodotyku, więc API w Javie musi się zmienić, albo będzie bezużyteczne.
Jeżeli coś się zmieni to na pewno i tak nie będę musiał zmieniać nawet jednej linijki kodu. 😉 Być może rozmiar kontrolek by pasowały pod palce.
Ty natomiast będziesz na W8 musiał skrobać od 0.
Zmieni się API (a przy takich zmianach musisz), to będziesz musiał zmienić i kod, bo rozmiar kontrolek to najmniej ważna sprawa (poza tym, że musisz przeprojektować i jeszcze raz zdefiniować interface przepisując wszystko) – najważniejsze są gesty i wielodotyk których obsługi teraz nie masz.
Przykładowo chcesz mieć w Javie wielodotyk i obsługę gestów? Musisz wyrzucić interface SWING i użyć Qt Jambi, ale chcesz przenieść aplikację na Androida to znowu musisz przepisać cały interface do jego API. Tak wygląda to Twoje nie zmieniasz ani linijki.
Po co mi zmieniać interfes skoro mam HTML i GWT?
Podmiana interfejsu to 5 min roboty. Masz gettery/settery i bindujesz pod kontrolki. Cała filozofia. Do tego C++ nie jest potrzebny.
To nie C++, że każdą kontrolkę musisz sobie sam narysować.
Chyba , że mówimy o Windows. Niestety Windows to śmieć i nie będe tu nic wyciągał za argument. WinRT nadchodzi i będziez musiał przepisać połowę softu, którego na W7 i tak nie uruchomisz.
Dzięki C++. 😉
Gesty ma obsługiwać silnik html , ktry dołączę jako biblitekę. Webkit czy jakieś inne ustrojstwo. Qt Jambi to syf. Swing za chwilę przejdzie na drugi plan dla JavaFX. Przejście na JFX to dosłownie chwila. To nie c++, że po zmianie jednej kontrolki nic nie działa.
Dodatkowo mam narzędzia do refactoringu i wiem gdzie się coś wysypie jeszcze przed kompilacją. W C++ przy większym projekcie przy zmianie jednej rzeczy nakrywasz się butami.
Nie wiem czy bronisz tej gazetki i wyboru tego języka ale bardzo kiepsko ci to idzie. C++ to zabytek. Napisać w tym bibliotekę, wrapper i koniec jego zastosowań. Reszta to robota języków skryptowych. AI od lat nie tworzy się w grach w C++ tylko w Pythonie czy Lua.
Coraz bardziej jestem przekonany, że zupełnie nie wiesz nic o programowaniu.
W C++ rysujesz dokładnie tak samo jak w Javie, a WinRT nie jest dzięki C++, a dzięki nowemu interface o odmiennej charakterystyce (C++ nie ma tu nic do gadania). W W7 nie uruchomisz z prostego względu – nie ma tam Metro i jest tam jeszcze WinAPI pamiętające czasy Windows 95.
Z JavaFX to żart? Ten projekt to od lat trup i nikt o nim nawet słyszeć nie chce.
O szok masz narzędzia refractoringu, jak każdy inny język, a świetne narzędzia refractoringu mam u siebie w IDE do C++ i co to niby zmienia?
[quote]Reszta to robota języków skryptowych. AI od lat nie tworzy się w grach w C++ tylko w Pythonie czy Lua. [/quote]
To co mówisz jest żenujące już. Pomijając już to, że w grach Pythona wszyscy omijają z daleka i już Java jako "język skryptowy" jest popularniejsza to AI w skryptach wygląda tak:
[code]if ( obiekt.WidziPostac() ){
if( obiekt.Ukryty() ){
obiekt.SzukajUkrycia();
}
else obiekt.Strzelaj( postac );
}[/code]
Z czego cała implementacja metod "obiekt" jest napisana w C++ w silniku – dzięki takiemu rozłożeniu nie trzeba co chwilę rekompilować projektu, a wydajność pozostaje, bo wszystko co ma wpływ na wydajność siedzi w silniku, a skrypty tylko sterują implementacją w C++.
Javafx to nowy Swing. Oracle pompuje w to nie mniejsza kase niz MS w Metro. Fx ma mieć pełne wsparcie dla multimediów z akceleracją gpu. Na winde jest juz wersja do testów za niedługo będzie na Linux. Java to przede wszystkim platforma dla biznesu. Html i javascipt nie nadają sie , bo pomimo szumu wciaz nie ma sztywnego standardu. Html nie przyjął się w biznesie i długo się nie przyjmie.
C++ to tylko na zabawki z bsod co 5 min bo itak nik sie nie przejmie stratą savów. 😉
Poza tym im bardziej projekt w cp rozbudowany tym bardziej przypomina jave. Gc, pilnowanie rozmiarow tablic, itp. Gierki można w tym skrobać bo od wycieku pamięci jajek nie urywa. Nie doda sie na koncie Kowalskiego nagle kolejne zero itp. 😉
"Html nie przyjął się w biznesie i długo się nie przyjmie. "
A to dlaczego w prawie każdym ogłoszeniu o pracę dla Javowca mowa a Springu. Czyżby Spring nie pracował na HTML? 🙂
Ze względu na dużą bazę kodu w starych firmach. Firmy szukające pracowników do Springa szukają w rzeczywistości kogoś kto utrzyma już istniejący burdel. Mało kto się na takie rzeczy godzi stąd tyle ogłoszeń.
Startupy natomiast to RoR , Django, Python. Dziś nie ma czasu na zabawę z XMLem.
Ostatnio dochodzi całkowicie free (nie ma już wersji enterprise) WaveMaker. Taki 4GL dla Javy na Springu.
Prostą aplikację bazodanową z logowaniem i edytowalnymi tabelami robi się w kilka minut metodą drag&drop.
Nie wiem o czym piszesz. To co Django nie używa HTML?! W RoR nic nigdy nie pisałem, ale chyba też są jakieś szablony HTML.
Hmm, new i delete i wszystko co tego używa pod spodem (kolekcje STL), wywołania metod wirtualnych, wywołania metod i funkcji do osobnej jednostki kompilacji, wyjątki, tworzenie/przypisanie do shared_ptr, mutex lock/unlock. Rzeczywiście, baaaardzo specyficzne i nigdzie prawie nieużywane. Wszystko to ma (czasem znacznie) szybsze odpowiedniki w Javie.
Oczywiście benchmarki zawsze jakoś tak się pisze, żeby wszystko zrobić na surowych statycznych tablicach w jednym pliku. 😀
new/delete nie mają same w sobie praktycznie żadnego narzutu podobnie jak malloc, a po prostu czekasz na sprzęt – dlatego Java i aplikacje w C++ stosują zarządzanie pamięcią i robią jedno wielkie new (JVM dokładnie korzysta z new w C++) prealokacji (żeby OS i sprzęt zablokował dużą pamięć na przyszłość) i później części tej pamięci są dystrybuowane przez Singleton Managera pamięci w aplikacji (i przykładowo w programie korzysta się z Memory.new()) lub GC (manager wbudowany w Java), STL to biblioteka standardowa, której nikt praktycznie nie używa, metody wirtualne są unikane, podobnie jak wyjątki (ktoś ich używa? ;p).
Bjarne Soustrup by polemizował. 😀
Oj mają, mają, bo muszą blok pamięci na odpowiedniej liście znaleźć. Tymczasem w Javie alokacja to jest tylko zwiększenie wartości wskaźnika, a dealokacji nie ma (koszt = 0).
Linus Torvalds nigdy nie miał pozytywnej opinii o C++ 🙂
Tak, bo w C++ jak i PHP bardzo łatwo napisać śmieciowy kod, którego nikt później nie ogarnie. Dodatkowo chyba jak pamiętam przyczepił się jeszcze do śmietnika jakim są tony niesprawdzonych do końca bibliotek w C++.
Nie przyczepiał się do bibliotek w C++ (chociaż przyznam, że są one kłopotliwe, jeśli są rozprowadzane tylko w formie binarnej do jednego kompilatora), ale za to wielokrotnie przyczepiał się do Javy, który uważa, za okropny język. Linus po prostu uważa, że najwyższy poziom jaki człowiekowi potrzebny to C i dogłębna znajomość arch sprzętu, a inne języki nie powinny istnieć. Ogólnie Linus jasno wyraża swoje zdanie na temat języków – C++ nie lubi, bo za wiele robi za plecami programisty (za wiele ułatwia), a Java to zupełny potwór robiący za plecami wszystko łącznie z dostępem do pamięci.
Linus ma zastrzeżenia co do projektu samego języka. Bo C++ to taki ni pies nie wydra, niby wysokopoziomowe, ale abstrakcje, które oferuje, ciekną jak durszlak. Do niskopoziomowego kodowania prostych rzeczy wystarczy C, za to do wysokopoziomowego, tj. rozwiązywania naprawdę trudnych problemów przez duże zespoły ludzi, są lepiej zaprojektowane języki niż C++ (i bynajmniej nie mam na myśli tu Javy). Jeżeli brakuje wydajności, zawsze niewielkie fragmenty można zakodować w C albo wprost sięgnąć do systemu przez odpowiedni interfejs. Tak robimy w Cassandrze i działa to bardzo dobrze.
"Bo C++ to taki ni pies nie wydra, niby wysokopoziomowe"
Tak, tak i dlatego większość softu na PC jest napisana w C++.
Java jest stosowana tylko w celu obniżenia kosztów w przypadku produkcji na zamówienie lub mało seryjnej – innych zalet brak.
Jeżeli przez "większość" rozumiesz 50%, to się grubo mylisz. Nie ma danych na temat projektów zamkniętych, ale raczej nie ma powodów przypuszczać, by w projektach zamkniętych były znacząco inne proporcje niż w projektach otwartych. A projekty otwarte mają to do siebie… że można policzyć ile jest kodu (projektów) w jakim języku.
Tu masz na sourceforgu, szkoda że tylko do 2006, bo trend spadkowy dla C i C++ jest dośc wyraźny: http://wismuth.com/lang/languages.html
Tu bardziej aktualne dla SF: http://holycall.tistory.com/entry/SourceForge-Pro…
A tu (niestety dość stare) statystyki kodu w jednej z dystrybucji Linuksa (nie jądra, a całej dystrybucji): http://www.dwheeler.com/sloc/redhat71-v1/redhat71…
Na moim desktopie jest kilka aplikacji napisanych w C++ (Chrome, LibreOffice, Skype), wiele napisanych w C (większość softu przychodzącego z Ubuntu), kilka Javowych (głównie do developerki), dwie w Adobe AIR. Narzędzi CLI nie liczę, bo to głównie albo czyste C jest, albo bash, albo Python / Perl.
Widzisz, gdybyś nie programował to nie miałbyś żadnego programu napisanego w javie – taka jest prawda.
Statystyka jest do kitu – sugerujesz, że 17% programów na PC jest napisana w PHP – ROTLF.
A rozumiesz różnicę między "większość softu jest napisana w C++" a popularnością aplikacji? To że są 2 aplikacje napisane w C++, które można znaleźć na prawie każdym PC, a PHP prawie na żadnym, nie oznacza wcale, że w C++ pisze się większość softu. Poza tym, czemu zawężać się do PC? A Apple to co? Tam jest większość w C i Obj-C. 😛
Na załadowanie Windowsa czekasz nawet 10 min po zalogowaniu (aby się odmulił) bo od razu nie idzie tego Firefoxa odpalić i nie narzekasz. 😉
Na własne oczy Widziałem Windę 7 na średnim sprzęcie odpalającą się 20 minut.
Poza tym Firefox jest napisany w C++ _____i___JavaScript_____ 😉
Silnik w Firefox jest napisany w C++ (Gecko), który ma swój silnik JavaScript dla stronek napisany w C++ (SpiderMonkey), obok C++ do UI używa XUL. JavaScript poza stronami w czystym Firefox nie jest używany, a jest dopiero w rozszerzeniach (z prostego powodu, twórca aplikacji jeśli chce bezpieczeństwa użytkownika, nie może pozwolić na niskopoziomowy dostęp do pamięci rozszerzeniom często nieznanego pochodzenia i używa się języka skryptowego/zarządzanego z GC do takich newralgicznych miejsc, ale z C++ w jądrze aplikacji nikt nie zrezygnuje i renderery stron (Gecko (firefox), WebKit (safari/chrome), Trident (IE), Presto (opera)) jak i interpretery/maszyny JavaScript są pisane w C++, bo w tym miejscu najważniejsza jest wydajność).
Coś ci się POmyliło. JVM tez jest napisana w C++ a działa lepiej niż niejeden kompilator C++.
Fx używa JS i mnie nie interesuje co siedzi pod JS. Koniec kropka. Niech nim steruje nawet Św. Mikołaj. To, że JS jest napisany w C++ wcale nie stawia C++ na pierwszym miejscu, bo niby dlaczego JS skoro C++ jest take świetne?
Chrome ma V8 Pythona i ASM oprócz C++. Dlaczego całości w C++ nie zrobili?
Łapiesz czy jeszcze nie?
@jkl
Chyba śnisz albo był problem ze sprzętem, albo z userem który… sam nie wiem co miał zrobić.
Nie. Windows ma znacznie gorzej zrobiony podsystem we/wy niż Linux, a szczególnie opcje dotyczące zarządzania page cache, których praktycznie… nie ma. Dlatego nasz system baz danych działa lepiej na Linuksie niż na Windows. Pokaż mi działający odpowiednik madvise albo posix_fadvise w Windows API.
Hackerzy jak i poważni programiści nie używają C++. C++ zyskał sławę tylko dzięki MS i widać jak ich soft na tym C++ działa.Ostatni trojan o którym ostatnio głośno został napisany w C z nakładką OO. Dlaczego nie użyto C++? Ze względu na brak przenośności kodu C++.
a na co była potrzebna przenośność KODU przy pisaniu trojana?
Podobno Linux przebił barierę 0.8% popularności i w modzie jest żeby każdy nowo powstały wirus, trojan, robak i backdoor, na Windows, miał swojego Linuksowego odpowiednika – taka nobilitacja przez crackerów.
Niezupełnie. Raczej chodziło o XP -> Vista -> 7 -> 8 + nadchodzące W8 mobile.
ale tutaj nie ma problemu z brakiem spójności C++ pomiędzy wersjami windowsa, bo biblioteki C++ są zaszyte w msvcp.dll jako redisty lub kompilowane statycznie por wersja visuala i nie ma nic do rzeczy windows sam w sobie do tego.
Mówisz, że ten trojan to autonomiczny byt, który nie potrzebuje systemu by działać?
Minimalne zgrzyty z systemem zapewnia tylko C. Poza tym jest bardziej przewidywalny od C++.
mówię dokładnie coś innego, że użycie C lub C++ nie ma żadnego znaczenia dla wersji windowsa na której ma się uruchomić – cały CPP siedzie w jednej dll-ce lub jest statycznie linkowany, wiec aplikacja napisana dla winXP w C++ będzie tak samo działała na win8, a jeśli nie będzie działała, to będzie to kwestia zmian w API.
A jednak wybrali C, dlaczego? Czyżby na WinRT testowali i były zgrzyty?
Jakbyś nie skumał. Z windowsa na windows nie masz żadnej gwarancji, że ta twoja dll-ka zachowa się podobnie na wszystkich.
wybrali C bo widocznie lubili C i tyle, a napisanie trojana to i tak korzystanie z WinAPI, wiec nie ma znaczenia z jakiego poziomu go wywołasz – C czy C++, co najwyżej wielkość kodu może się różnić.
Gdyby ten trojan był w WinRT to kogo by miał zaatakować ? wirtualne maszyny z win8 consumer preview ? Poza tym, WinRT jest dostępny tylko dla aplikacji metro, a te są uruchamiane w piaskownicy, wiec trzeba jeszcze piaskownicę złamać żeby coś w systemie pomieszać.
Skumałem o co Ci chodzi – ale zwyczajnie opowiadasz androny. Kod napisany w C++ w np. VS2010 będzie działał tak samo na XP jak i Win8 – i nie ma znaczenia, czy to C++ czy C. Znaczenie ma jedynie czy WinAPI z którego w tym kodzie korzystasz nie zmieniło swojego działania z wersji na wersje windowsa.
Kolego, o tym temacie też widzę zerowe pojęcie. Dawniej wirusy były w większości w asm. Wiesz dlaczego? Bo trzeba było znać kod co do bajtu.
Jeżeli chcę mieć kod który uruhomię na wielu platformach to musi być C (nie cpp) . Gdyby chodziło o sam windows to mogli napisac i w powershellu.
Nie takie piaskownice padają jak ci się wydaje. Żadna piaskownica nie jest dobra na dziurawym systemie.
Zastanawiam się co takiego jest nieprzenośne w C++ w porównaniu do C. Napisanie przenośnego kodu w C też wymaga wysiłku, a wszystko to raczej kwestia wykorzystanych bibliotek.
Szczerze to nie wiem 🙂 Pamiętam, jak kiedyś były flejmy Linux vs MS, teraz widać poszło to w stronę języków programowania ;] Swoją drogą szczególnie rozbawiła mnie "fragmentacja" pamięci w C++ ;]
Czy tak ciężko dostrzec oczywistą oczywistość, że jakość i koszt utrzymania kodu zależy głównie od narzuconego stylu programowania w danym projekcie, "jakości" programistów, od samego projektu a dopiero na końcu od użytych technologii? No ale z zapalonymi neofitami nie ma co dyskutować :p
Co do samego pisemka… to trochę przerost formy nad treścią. Miało być dla ludzi pracujących w IT, a wyszły jakieś teoretyczne akademickie rozważania. Niektóre zdania w artykułach są tak najeżone terminologią, że aż w oczy kłują ;] Generalnie widać "brak lekkości", a nie zapominajmy : skomplikowane problemy można wytłumaczyć prostym językiem pod jednym warunkiem, trzeba je samemu dobrze rozumieć ;]
@"No ale z zapalonymi neofitami nie ma co dyskutować :p "
Można, można, żeby ich nawrócić na właściwe tory 😉 Ale jkl to jest troll z premedytacją, prawdopodobnie jakiś doktorant, któremu się nudzi w pracy i postanowił udawać studenciaka, który się naczytał blogów z najnowszymi buzzwordami i naoglądał wykładów różnych guru na youtubie, a wszystko co napisał to jednolinijkowce w Scali. Jak widać po liczbie komentarzy, sporo osób się nabrało.
Natomiast merytorycznie podyskutować o C++ vs Java, to można z takimi osobami jak włądca_kodu. Ale wątpię, żeby mnie przekonał, żeby ten raytracer, który ma działać w czasie rzeczywistym obok symulacji fizyki całego świata gry (na którą mam 3 ms, a tyle to mi może zjeść sam GC), napisać w Javie. To nie jest tak, że developerzy gier kochają C++ (no może kilku;) ), bardzo dużo go nienawidzi, ale nie ma za bardzo innego wyjścia. To nie jest tak, że nie znamy innych języków. Bardzo dużo się czerpie z podejścia funkcyjnego, ale że nie wygląda to tak pięknie jak w Scali, cóż nikt nie powiedział, że to jest łatwa robota.
Nie ma co nawet porównywać wydajności Java vs C++ w tych zastosowaniach, bo nawet porównując C++ do C++ można uzyskać gigantyczny skok wydajności inaczej ustawiając dane, bez zmiany algorytmów. Jak ma się kod cache friendly w Javie? Jak ma się wykorzystanie SSE? Większość Javowców zamknęła to pod pojęciem "przedwczesnej optymalizacji" i oznaczyła jako nieistotne. Bo jak masz webową aplikacje, która się ładnie skaluje na 100 komputerów to to jest nieistotne. Jak wszystko co masz to komputer użytkownika, czy 7 letnia konsola to już nie jest tak pięknie. A użytkownicy ciągle chcą więcej i więcej.
Alokacje są robione zawsze z ciągłego obszaru pamięci, nie ma problemu false-sharing, alokatory potrafią obsługiwać NUMA. JVM potrafi używać też 32 bitowych wskaźników do adresowania 64 GB RAMu (oszczędność pamięci). Jest też scalar replacement oszczędzające pamęć na stercie i nagłówki obiektów. Pracuje się też nad object inlining i istnieją prototypowe JVM, które to robią. Niemniej przy obecnych wielkościach cache różnice są niewielkie, 20-30% to zwykle góra co się da uzyskać na byciu "cache friendly".
Jest już od dawna. JVM umie rozwijać i wektoryzować pętle, ma pełne wsparcie dla SSE4. Właściwie umie robić wszystkie te same optymalizacje co gcc -O2 i niektóre z -O3.
Poza tym JVM robi znacznie więcej optymalizacji pod kątem kodu OOP i wielowątkowości, np. inlining wywołań wirtualnych jest znacznie bardziej zaawansowany niż w jakimkolwiek kompilatorze C i są też specyficzne optymalizacje blokad (synchronized), o których C nic nie wie, bo tam to jest w bibliotekach a nie w języku.
Nie. Te mikrooptymalizacje są zamknięte pod pojęciem "zadanie dla JVM a nie dla programisty". W C większość mikrooptymalizacji robi programista, w Javie większość robi JVM. Wiadomo, że jest to zadanie bardzo ambitne i że JVM nie będzie nigdy tak dobre w optymalizacji jak ekspert posiadający dużo czasu, ale w większości przypadków jest już bardzo blisko, a w przypadku kodu pisanego przez przeciętnych koderów, zwykle radzi sobie już znacznie lepiej – tzn. mając kod napisany przez przeciętnego klepacza kodu w C i przez przeciętnego klepacza kodu w Javie, jest bardzo prawdopodobne, że kod w Javie będzie znacznie szybszy.
JVM cały czas ustępuje C i .NET pod względem efektywności wykorzystywania małych obiektów i tablic małych obiektów. Większość Javowców od lat lobbuje za dodaniem value-types do JVM (jak w .NET), ale na razie Oracle jest na to głuchy. IMHO to jest bardzo duża przeszkoda w pisaniu wydajnych gier w Javie.
Jest bardzo istotne. Utrzymanie 100 serwerów kosztuje kupę kasy, znacznie więcej niż czas programisty. I nie chodzi tu o zakup sprzętu a jego utrzymanie. Dlatego duże firmy ostatnio znowu idą w "małe klastry złożone z drogich serwerów" zamiast "duże klastry tanich serwerów'.
"Zastanawiam się co takiego jest nieprzenośne w C++ w porównaniu do C. Napisanie przenośnego kodu w C też wymaga wysiłku, a wszystko to raczej kwestia wykorzystanych bibliotek. "
Właśnie biblioteki są w C++ nieprzenośne.
Gadasz waść bzdury. Wszystko zależy od potrzeb. Aplikacje biznesowe – C#/.NET lub Java i z tym nikt nie będzie dyskutować. Jednak nie znaczy to że C++ jest niszą alby czymś niepotrzebnym, bo na aplikacjach biznesowych świat się nie kończy. Co do samego czasopisma – prawda, powinno być szerokie spojrzenie na temat, czasopismo programistyczne bez działu na temat .net – wtf?
Ciekawe, czy znowu studenki będą szukać chętnych do pisania za darmo i za "doświadczenie".
Bardzo fajnie. Mam nadzieję, że będą też podstawy dla początkujących. Również moglibyście pisać o technologiach webowych (html5,css3,javascript,ajax,php,ruby etc.).
Podstawy dla początkujących są w kwabzdylionie książek i tutoriali na sieci.
Leniwym natomiast nic nie pomoże.
A C++ masz w pierdylionie. Co to za porównanie?
Z takim contentem to raczej ta książka pasuje pod programowanie embedded.
Poza tym Flash/Flex ? Przecież to już prawie zdechło…
prawie zdechło, a reklamy na wszystkich portalach we flashu za to nie wiem, gdzie znaleźć takie w html5 żeby popatrzeć sobie czy zjada cpu
we flashu bo ludzie się nauczyli i nieche im się zmieniać. Na iphone ipad nie ma flasha i zyje
Poza tym od kiedy to reklamodawcy przejmuja sie czy reklama zjada CPU? 😉
mnie to interesuje, dlatego zapytałem czy jest gdzieś portal gdzie reklamy zdychającego flasha zostały zastąpione powszechnym html5
"Również moglibyście pisać o technologiach webowych (html5,css3,javascript,ajax,php,ruby etc."
I cała gazetka dla zainteresowanej osoby zaoferuje max 1 artykuł, bo reszta będzie o technologiach których ta osoba nie używa i którymi nie zamierza się zainteresować? Lepiej porządnie ogarnąć pewną spójną dziedzinę niż celować w każdego czyli w nikogo.
Co do podstaw, to z magazynów się niczego nie nauczysz. Przerabiałem to w przypadku Pascala. Do nauki podstaw polecam książki.
tylko c++? :-
Wytrwalosci zycze:)
Kilka zyczliwych uwag:
– wersja mobi bylaby mile widziana
– z jakiegos powodu nie moge dodac RSSa do Google Readera….
Drobna rada dotycząca nadawania tytułu. Gdy tytułujemy cos "blabla w praktyce" zastanówmy się czy tytuł z drugiego bieguna – "teoria blabla" – ma sens, tzn. czy nie popełniamy masła maślanego o zabarwieniu marketingowym.
"C++ w praktyce" to jeszcze tak nie bije po oczach. Moim niedościglym faworytem jak dotąc jest "MS Office w praktyce". Za nic nie mogę pojąc jak miałaby wyglądać teoria MS office :).
Rozumiem np. "wzorce projektowe w praktyce" albo "UML w praktyce" jeśli autor raczy nas rozbudowanym życiowym przykładem. Albo "SQL w praktyce" żeby zasygnalizować, że nie będzie algebry i relacji. W więskzości przypadków tam gdzie mamy kod w konretnym języku, to nie mamy teorii, więc nie trzeba tego zaznaczać. A jeśli np. w książce teoretycznej jest jakiś wykonywalny kod w fortranie, to i tak po tytule wiadomo, że to nie książka do fortrana ale do kawałka teorii z ilustracjami w fortranie.
Oprócz mojej złej opinii o C++ jest jeszcze opinia twórcy najlepszego systemu na świecie Linusa Torvaldsa, który także nie pozostawia suchej nitki na tym syfie.
On zjadł zęby na C i nie zwyczajnie potrzebuje ++. Są też ludzie, którzy szybciej i lepiej napiszą funkcję w basicu na Spectrumie niż odpowiednie rozwiązanie w C++. I dobrze, niech robią, skoro działa.
Skoro on nie potrzebuje C++ to dlaczego ciągle reklamuje się tan syf?
Wszystko co się dziś sprzedaje ma dostarczać bogatego UI. Z C++ o ile to możliwe to zupełnie nieopłacalne. CSS HTML i języki skryptowe do tego języki oparte o maszynę wirtulaną mocno typowane. To dziś jest na pierwszym planie, nie C++. 😉
Jedziesz po C++ opierając się na opinii gościa od C, a potem wychwalasz całkowitą przeciwność C. OK.
Jadę na własnej opinii. Też powinieneś jechać na własnej.
O shit, nie zwróciłem uwagi na resztę twoich komentarzy i nakarmiłem trolla.
Sam chciałeś przytrollowac i ci nei wyszło.
I wybuchają. Właśnie przed chwilą wybuchł mi Inkscape gubiąc niezapisane zmiany. Nie raz wybuchał mi też LibreOffice czy MS Office, a mojej żonie ArcGIS. Dla porównania Eclipse ani IntelliJ IDEA nie wybuchł mi nigdy, a używam go zawodowo.
Programiści, którzy tak uważają, powinni mieć zakaz zbliżania się do kompilatora C/C++. Historia zna mnóstwo takich "banalnych przypadków", które doprowadziły do katastrof.
Dwie minuty zastanawiałem się gdzie podziały się wszystkie, ponad 260 komentarze 🙂
Jak dla mnie, to proszę coś o Pythonie. Mam potrzebe napisania prostego programu dla mojej maszyny numerycznej. Coś podobnego do DXF 2 G-Code…
Nie rozumiem jak można pisać o C++, że jest „niszowy", „dinozaurem” itp. Ostatnio czytałem gdzieś raport wg. którego najbardziej poszukiwani programiści, to właśnie programiści C++ – Java jest na drugim miejscu. Jerzy Grębosz napisał, że jeśli ktoś nie lubi C czy C++, to z powodu trudności ze zrozumieniem idei wskaźników, które są genialnym wynalazkiem i nie ma go w Javie.
Ktoś pisał o przyszłości aplikacji w chmurze. Czy to ma przyszłość? Wątpię. Mimo rozwoju łączy internetowych nie zawsze mamy dostęp do sieci, a ogromny postęp w sektorze dysków twardych i pamięci (flash) powoduje, że nie mamy problemu z tym czy trzymać coś, czy może się tego pozbyć. Kiedy rozmiary dysków twardych sięgają 3TB nie ma sensu żałować miejsca na jakiś program czy plik.
Odszedłem od tematu. Najpoważniejsze projekty tworzy się właśnie w C czy C++. Chodzi mi o oprogramowanie urządzeń sterowanych numerycznie, zastosowanie w instytutach fizyki i wielu innych ośrodkach naukowych. Wiele gier i programów także pisze się w C++. Czy jest to tak banalny język (nie wydaje mi się) czy po prostu jest tak dobry?
The particular Louis Vuitton bags are available coming from virtually any exceptional go shopping or perhaps inside the shopping malls with very reasonable rates. These types of goods are produced from canvas that means they may be water-proof thus best through the stormy periods.