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

C++11 - przedłużanie agonii czy zbawienie dla C++?
Wibowit
  • Rejestracja:prawie 20 lat
  • Ostatnio:około 6 godzin
0

No to w takim razie równie dobrze można by sprawdzić jaką ma szybkość PHP po przekonwertowaniu HipHopem, który też ma ograniczenia.

Z tym, że np dla takiej Javy (i chyba wszystkich języków kompilowanych do bajtkodu, chociaż nie jestem pewien) istnieje Excelsior JET, który radzi sobie chyba z całością API Javy i daje kopa jeśli chodzi o prędkość uruchamiania: http://www.excelsior-usa.com/java-startup-time.html


"Programs must be written for people to read, and only incidentally for machines to execute." - Abelson & Sussman, SICP, preface to the first edition
"Ci, co najbardziej pragną planować życie społeczne, gdyby im na to pozwolić, staliby się w najwyższym stopniu niebezpieczni i nietolerancyjni wobec planów życiowych innych ludzi. Często, tchnącego dobrocią i oddanego jakiejś sprawie idealistę, dzieli od fanatyka tylko mały krok."
Demokracja jest fajna, dopóki wygrywa twoja ulubiona partia.
Zobacz pozostałe 20 komentarzy
vpiotr
OK, dzięki za wyjaśnienie. Wydłużę pętlę 10x, to powinno zniwelować tę niedogodność.
Wibowit
zrobiłem wersję z rozgrzewką i mierzeniem czasu w środku (milisekundy): http://pastebin.com/Mar9S7Mj wyniki i tak nie są jakieś mocno stabilne, u mnie wahają się (dla 10 iteracji) pomiędzy 1.890 a ok 1.950 (dla 10 iteracji) na core2 3 ghz
Wibowit
ten kod jest odpowiednikiem pythonowego, jak chcesz mieć zbliżonego do innych wersji to wywal konstruktor intlist przyjmujący inta.
vpiotr
Jeśli masz pomysł na optymalniejszą wersję Java to podaj (cały kod), użyję do testu wieczorem. Używam 50 iteracji, zwiększę do 500.
Wibowit
ciężko napisać coś bardziej optymalnego, bo reguły są dość sztywne (tzn do optymalizacji zostaje w zasadzie tylko implementacja wektora, a na razie nie widzę jak go widocznie przyspieszyć). w zasadzie jedyna moja optymalizacja która jest zgodna w 100% z zasadami to zamiana ostatniej pętli w getprimes na for (int it = 0; it < s.size(); ++it) {
0
Wibowit napisał(a):

No to w takim razie równie dobrze można by sprawdzić jaką ma szybkość PHP po przekonwertowaniu HipHopem, który też ma ograniczenia.

Nie porównuj, HipHop oferuje obcięty dialekt i wybrane elementy bibliotek, PyPy to w niemal 100% kompatybilna (z perspektywy języka i biblioteki standardowej, nie rozszerzeń interpretera) implementacja Pythona 2.7. Większość bibliotek odpalisz, wszystkie czysto pythonowe, te wykorzystujące komponenty natywne poprzez ctypes również, problem sprawiają jedynie rzeczy pisane w Cythonie (to oddzielny dialekt będący miksem C i Pythona) oraz samym C.

Wibowit
  • Rejestracja:prawie 20 lat
  • Ostatnio:około 6 godzin
0

No to czemu PyPy nie jest oficjalną VMką Pythona? Java już dawno przeszła z interpretowania na JIT.


"Programs must be written for people to read, and only incidentally for machines to execute." - Abelson & Sussman, SICP, preface to the first edition
"Ci, co najbardziej pragną planować życie społeczne, gdyby im na to pozwolić, staliby się w najwyższym stopniu niebezpieczni i nietolerancyjni wobec planów życiowych innych ludzi. Często, tchnącego dobrocią i oddanego jakiejś sprawie idealistę, dzieli od fanatyka tylko mały krok."
Demokracja jest fajna, dopóki wygrywa twoja ulubiona partia.
0

Bo to relatywnie świeży NIEZALEŻNY projekt (na innej licencji, MIT różni się nieco od PFL), który 4 lata temu był dopiero wczesnym researchem i dopiero trochę ponad rok temu uzyskał (niemal) 100% zgodność z najnowszą wersją brancha 2.x?

0

Poza tym CPython jest bardziej przenośny niż PyPy, z oczywistych względów, resztę sobie dopowiedz.

Wibowit
  • Rejestracja:prawie 20 lat
  • Ostatnio:około 6 godzin
0

Czy jest jakiś duży system który stoi na PyPy, które się nie wykłada?


"Programs must be written for people to read, and only incidentally for machines to execute." - Abelson & Sussman, SICP, preface to the first edition
"Ci, co najbardziej pragną planować życie społeczne, gdyby im na to pozwolić, staliby się w najwyższym stopniu niebezpieczni i nietolerancyjni wobec planów życiowych innych ludzi. Często, tchnącego dobrocią i oddanego jakiejś sprawie idealistę, dzieli od fanatyka tylko mały krok."
Demokracja jest fajna, dopóki wygrywa twoja ulubiona partia.
vpiotr
  • Rejestracja:ponad 13 lat
  • Ostatnio:prawie 3 lata
0
Wibowit napisał(a):

Czy jest jakiś duży system który stoi na PyPy, które się nie wykłada?

To nie chodzi o to czy coś się wykłada czy nie, tylko żeby zastosować produkcyjnie PyPy trzeba:
a) mieć jego implementację na dane środowisko
b) mieć zaimplementowane wszystkie moduły w czystym Pythonie, bo moduły w C/C++ (dość powszechne) z tym nie współgrają - z jakichś tam przyczyn bliżej mi nie znanych

Wibowit
  • Rejestracja:prawie 20 lat
  • Ostatnio:około 6 godzin
0

A więc jest tylko ciekawostką nie nadającą się na produkcję.


"Programs must be written for people to read, and only incidentally for machines to execute." - Abelson & Sussman, SICP, preface to the first edition
"Ci, co najbardziej pragną planować życie społeczne, gdyby im na to pozwolić, staliby się w najwyższym stopniu niebezpieczni i nietolerancyjni wobec planów życiowych innych ludzi. Często, tchnącego dobrocią i oddanego jakiejś sprawie idealistę, dzieli od fanatyka tylko mały krok."
Demokracja jest fajna, dopóki wygrywa twoja ulubiona partia.
0

Chciałbym zauważyć, że te nowe i szybkie w pisaniu technologie (mam na myśli Java i C#) są czasem używanie nie tam, gdzie trzeba. Przykłady:

  1. Eclipse i Netbeans są napisane prawie wyłacznie w Javie. Efekt? Są strasznie powolne (nawet na moim C2Q6600). Powinny być napisane w C++ z frameworkiem.
  2. Visual Studio 2010 używa WPF. Niechby był napisany w C++, ale co z tego, skoro jest kobylasty. Znowu - powinno być napisane w C++ z frameworkiem (ale nie .NET).

Co z tego że być może w Javie i w C# trochę szybciej się pisze programy wielowątkowe, gdy ta dodatkowa szybkość jest z nawiązką zjadana przez wolne wykonywanie kodu napisanego w Javie lub w C#? Vide: Eclipse, Netbeans, VS Studio 2010.

0
vpiotr napisał(a):

b) mieć zaimplementowane wszystkie moduły w czystym Pythonie, bo moduły w C/C++ (dość powszechne) z tym nie współgrają - z jakichś tam przyczyn bliżej mi nie znanych

Już częściowo współgrają, C API jest dopiero implementowane, stopniowo. Przede wszystkim to Python w Pythonie, były inne priorytety, m. in. osiągnięcie pełnej implementacji biblioteki standardowej w czystym Pythonie i dopracowanie JIT. Aktualna wersja wspiera już całkiem sporo, ale nadal za mało dla najbardziej rozbudowanych bibliotek. C API udostępnia trochę internalsów interpretera, w tym zarządzania pamięcią, które w PyPy wyglądają inaczej, nie jest możliwe proste mechaniczne naklepanie wrapperów. Poza tym niejako obok C API rozwija się implementacja numpy dla PyPy, co ma być jednym ze sprawdzianów możliwości VM, porównanie wydajności tego systemu i natywnych bibliotek pisanych m. in. w fortranie.

Wibowit
  • Rejestracja:prawie 20 lat
  • Ostatnio:około 6 godzin
0

W C++ jest napisany JCreator do edycji kodu Javowego. Ewentualnie można użyć Vima lub Emacsa :]


"Programs must be written for people to read, and only incidentally for machines to execute." - Abelson & Sussman, SICP, preface to the first edition
"Ci, co najbardziej pragną planować życie społeczne, gdyby im na to pozwolić, staliby się w najwyższym stopniu niebezpieczni i nietolerancyjni wobec planów życiowych innych ludzi. Często, tchnącego dobrocią i oddanego jakiejś sprawie idealistę, dzieli od fanatyka tylko mały krok."
Demokracja jest fajna, dopóki wygrywa twoja ulubiona partia.
3

Chciałbym zauważyć, że te nowe i szybkie w pisaniu technologie (mam na myśli C++) są czasem używanie nie tam, gdzie trzeba. Przykłady:

Oficjalny klient Gadu-Gadu jest napisani wyłacznie w C++. Efekt? Jest strasznie powolne (nawet na moim C2Q6600). Powinien być napisane w Asemblerze z frameworkiem

Co z tego że być może w C++ trochę szybciej się pisze programy, gdy ta dodatkowa szybkość jest z nawiązką zjadana przez wolne wykonywanie kodu napisanego w C++? Vide: Oficjalny klient Gadu-Gadu.

Azarien
może dlatego wciąż używam GG6 :-) i tak, mam C2Q6600.
OT
Mają wydać wersję na Linuksa, jak twierdzą. To dopiero będzie kupa śmiechu.
KA
wole wtw, najmniej problemow, nie pożera zasobów jakos specjalnie, brak reklam, nawet emotikony trzeba se samemu wgrac jak ktos ich potrzebuje :)
1
Dinozaur napisał(a):

Chciałbym zauważyć, że te nowe i szybkie w pisaniu technologie (mam na myśli C++) są czasem używanie nie tam, gdzie trzeba. Przykłady:

Oficjalny klient Gadu-Gadu jest napisani wyłacznie w C++. Efekt? Jest strasznie powolne (nawet na moim C2Q6600). Powinien być napisane w Asemblerze z frameworkiem

Co z tego że być może w C++ trochę szybciej się pisze programy, gdy ta dodatkowa szybkość jest z nawiązką zjadana przez wolne wykonywanie kodu napisanego w C++? Vide: Oficjalny klient Gadu-Gadu.

Tak się składa, że nie jest napisane wyłącznie w C++. Głównie Flash ze swoim ActionScriptem macza palce w powolności tego kombajnu (reklamy). I pewnie jeszcze Javascript w tej wbudowanej przeglądarce internetowej.
Wywalić Flasha z tego GG i wtedy możemy pogadać o szybkości rzeczonego GG.

EE
Jak dla mnie to poprzedni post był ciut ironiczny. Ale ja się tam nie znam.
KR
OpenOffice Impress nie ma Flasha ani JS, tylko czysty C++, a przy edycji tekstu w ramce tekstowej zamula niemiłosiernie. Kiepski program można napisać w każdym języku.
Sparrow-hawk
  • Rejestracja:prawie 13 lat
  • Ostatnio:2 miesiące
  • Lokalizacja:Katowice
  • Postów:189
0

Język C oraz C++ ma jeszcze jedno zastosowanie, które zostało tu już wymienione. Mianowicie pozwala na tworzenie oprogramowania w systemach wbudowanych. Programuję AVR oraz ARM'y i tu póki co nie zanosi się na nowy język programowania, oraz na to, aby C++ odszedł szybko w nie pamięć. W tym przypadku praktycznie każde urządzenie, które ma w sobie mikroprocesor/mikrokontroler wymaga oprogramowania napisanego w C/C++, rzadziej Assembler. A zabawa zaczyna się, kiedy piszemy więcej i więcej w obrębie jednego urządzenia/układu, a zasobów nam nie przybywa.

edytowany 1x, ostatnio: Sparrow-hawk
KR
Zgoda, ale to raczej takie C z klasami a nie pełne C++. Spróbuj użyć sobie np. obsługi wyjątków czy nawet STL / Boost. Co do tego czy każde oprogramowanie wbudowane wymaga C/C++. Odtwarzacze BlueRay, telewizory, kserokopiarki czy karty inteligentne radzą sobie bardzo ładnie z Javą.
vpiotr
  • Rejestracja:ponad 13 lat
  • Ostatnio:prawie 3 lata
0
Wibowit napisał(a):

No to w takim razie równie dobrze można by sprawdzić jaką ma szybkość PHP po przekonwertowaniu HipHopem, który też ma ograniczenia.

Z tym, że np dla takiej Javy (i chyba wszystkich języków kompilowanych do bajtkodu, chociaż nie jestem pewien) istnieje Excelsior JET, który radzi sobie chyba z całością API Javy i daje kopa jeśli chodzi o prędkość uruchamiania: http://www.excelsior-usa.com/java-startup-time.html

Podaje nowe wyniki:

Kopiuj
Wyniki dla 1000000 x 500
----------------------------
PHP 5.3.8                        : 230   [s]
Python 2.6.5                     : 105.935 [s]
Node.js 0.8.1 x64                : 22.159 [s]
Java 1.7 x64  / org              : 9.221 [s]
Python 2.7.2 / PyPy 1.9 (bin x32): 7.234 [s]
C++ / VS2010 / x32               : 3.806 [s]
Java 1.7 x64 / Test              : 3.777 [s]
Free Pascal 2.6.0 x64            : 3.745 [s]

Uwaga: moja wersja C++ jest zoptymalizowana - nie zwraca tablicy przez wartość tylko przez referencję.
Ale nie ma to wpływu bo równie dobrze można zwracać przez wskaźnik inteligentny i wyszło by na to samo.

Edit:
Test na podstawie: http://blog.famzah.net/2010/07/01/cpp-vs-python-vs-perl-vs-php-performance-benchmark/
Kod dla C++ i Pascal w ostatnim komentarzu ma ww stronie.

edytowany 4x, ostatnio: vpiotr
Zobacz pozostałe 3 komentarze
vpiotr
@Azarien: kod w C# dopiero trzeba by do tego testu napisać...
A1
Mam takie pytanie, da się w ogole zwrócić tablicę w c++ przez wartość? Wydawało mi się ze tablica to taki specjalny typ i nie można go przekazywać przez warotość? No chyba ze można "opakować" tablice w strukturę/klasę:P A co do wyników to szczerze jestem zaskoczony tym, że java jest szybsza. Mógłbyś zinterpretować ten wynik w łopatologiczny sposób:)?
vpiotr
W programie użyłem std::vector<int> czyli prawie zwyczajny obiekt. AFAIK można zwracać obiekty w C++ przez wartość, tylko trzeba na to uważać bo nie zawsze działa zgodnie z oczekiwaniem (obiekty tymczasowe) - po to wynaleziono "rvalue references" w C++11: http://www.cprogramming.com/c++11/rvalue-references-and-move-semantics-in-c++11.html
A1
Wiem, że obiekty można zwaracać przez wartosć, ale chodziło mi o to, że napisałeś "nie zwraca tablicy przez wartość tylko przez referencję". Ale jak teraz podałeś ze użyłeś vector to chyba wszystko jasne:)
vpiotr
Tablica w C++ ma dla mnie wiele imion... a[], std::vector, boost::array, boost::multi_array, to po prostu ogólne pojęcie.
vpiotr
  • Rejestracja:ponad 13 lat
  • Ostatnio:prawie 3 lata
0
anonim1 napisał(a):

A ciekawa praca to dla mnie taka, w której mogę się ciągle rozwijać, poznawać nowe technologie, nowe algorytmy, może i nawet uczyć się nowych rzeczy z szeroko pojętej matematyki, czyli nie tylko pisać kod, który ktoś już od górnie zaprojektował albo który znalazłem w internecie.
Żeby może to jaśniej wytłumaczyć dam kontrprzykład. Mam wrażenie (wrażenie, a nie doświadczenie), że praca w Web Dev to właśnie takie nudne, szablonowe tworzenie tego samego. Wydaję mi się, że przy takich projektach głównie bazodanowcy mają ciekawą pracę.

Robiłem samodzielnie kilka serwisów web (sklepy, portal społecznościowy, blog, forum, wizytówki) i nigdy nie było to nudne. Ale nie była to praca full-time więc może na etat to co innego. Gdy sam jesteś sobie projektantem, wykonawcą i testerem to może być to naprawdę wciągające.

Wibowit
  • Rejestracja:prawie 20 lat
  • Ostatnio:około 6 godzin
0

Gdy sam jesteś sobie projektantem, wykonawcą i testerem to może być to naprawdę wciągające.

Gdy sam sobie jesteś sterem, żeglarzem, okrętem, to to jest całkiem inna para kaloszy.


"Programs must be written for people to read, and only incidentally for machines to execute." - Abelson & Sussman, SICP, preface to the first edition
"Ci, co najbardziej pragną planować życie społeczne, gdyby im na to pozwolić, staliby się w najwyższym stopniu niebezpieczni i nietolerancyjni wobec planów życiowych innych ludzi. Często, tchnącego dobrocią i oddanego jakiejś sprawie idealistę, dzieli od fanatyka tylko mały krok."
Demokracja jest fajna, dopóki wygrywa twoja ulubiona partia.
0

à propos standardu i absorbowanego w nim Boost'a: uzywal ktos z was biblioteki "Loki"? podobno czesc wzorcow i szablonow z niej, projektanci wykorzystali przy budowie boosta. jak ktos mial okazje z niej korzystac, niech zostawi opinie

msm
Administrator
  • Rejestracja:prawie 16 lat
  • Ostatnio:4 miesiące
0

à propos standardu i absorbowanego w nim Boost'a: uzywal ktos z was biblioteki "Loki"? podobno czesc wzorcow i szablonow z niej, projektanci wykorzystali przy budowie boosta. jak ktos mial okazje z niej korzystac, niech zostawi opinie

Może nie do końca 'korzystałem', ale...

No więc genialna książka: http://www.amazon.com/Modern-Design-Applied-Generic-Patterns/dp/0201704315 - jestem w trakcie czytania (tzn. przeczytam rozdział raz na miesiąc...) i stanowi świetne wprowadzenie (?) do bardziej zaawansowanych części języka C++.
Jak to się ma do Lokiego? Ta biblioteka została napisana przez autora tej książki podczas jej pisania, książka w większości składa się z opisywania sztuczek z szablonami i ich zastosowaniu w praktyce - właśnie w tej bibliotece.

Endrju
  • Rejestracja:około 22 lata
  • Ostatnio:ponad rok
0

Skoro mowa o Loki to polecam książkę Andrei Alexandrescu - Modern C++ Design. Ta biblioteka to w zasadzie efekt jej lektury. Sam jej kod jest trochę stary i chyba już nierozwijany - np. użycie variadic templates znacząco skraca kod w niektórych miejscach. Część rzeczy jest też niepotrzebna, bo zostały one dodane do biblioteki standardowej.

Edit: Tak długo pisałem, że @msm mnie uprzedził. ;-)


"(...) otherwise, the behavior is undefined".
edytowany 1x, ostatnio: Endrju
msm
Too late :P Fakt, loki się trochę zestarzało/dubluje kod w standardzie - ale i tak warto książkę przeczytać.
Endrju
Książkę - pewnie!
0

hehe ok! :)
tak sie sklada ze dzisiaj mi przyszla swieza "nowoczesne projektowanie w C++ ", edycja polska i dlatego sie zapytalem, bo juz oblookalem strone Adrei A. i zobaczylem ze juz kilka lat nie jest wspierana a poza tym ze wlasnie architekci boosta sie wzorowali na niej ( jeszcze nie doszedlem na czym, bo nie znam boosta ), ale sama tresc mi sie wydaje 'rewolucjonizujaca' myslenie amatora c++ ;) jak wam sie wydaje - latwiej do boosta od tej lekturki ?
btw. w polsce sa tansze ksiazki niz w usa

Rekman
  • Rejestracja:prawie 13 lat
  • Ostatnio:ponad 9 lat
  • Postów:148
0

To, że dotarła z dziesięcioletnim opóżnieniem to nidopatrzenie naszych wydawców. No, ale jest. A 'stary' kod - chcaiałbym taki kod potrafić pisać , nie przepisać, dziś , a jak nie dziś to przynajmniej w przyszłości. Czytając ponownie, inaczej zacząłem rozumieć szablony. Jest to również dowód na to, że C++ ciągle się rozwija i nie ma obawy, że za kilka czy kilkanaście lat jego znajomość do niczego się nie przyda.

vpiotr
  • Rejestracja:ponad 13 lat
  • Ostatnio:prawie 3 lata
0

Do metaprogramowania ta książka wydaje się niezła: http://amzn.com/1460966163

HO
  • Rejestracja:ponad 13 lat
  • Ostatnio:około 11 lat
  • Postów:283
0

Nie przeczytałem wszystkich odpowiedzi ale napiszę jak ja to widzę.

C++ obecnie ma się bardzo dobrze i gorsze czasy ma już za sobą. Skończyła się wielka fascynacja Javą, C# nie jest bezpośrednią konkurencją. Przez ostatnie lata MS faworyzował C#, jednak od roku wychodzą czasami różne informacje od MS że chcą wesprzeć C++.

Nie uważam że wszystkie nowe firmy informatyczne będą wchodzić w C# czy inny język a C++ ominą szerokim łukiem. Standard C++ to nie to samo co "standard" Java. W bibliotekach zewnętrznych są elementy, których niby brakuje w C++. Wystarczy zainstalować Qt i mamy kombajn - kombajn który pozwala pisać i pod Windows i pod Linux.

Nowy standard nie wpłynie obecnie aż tak bardzo na popularność języka bo musi być najpierw zaimplementowany w kompilatorach. Nikt nie będzie przecież pisał kod z wykorzystaniem nowych rzeczy pod g++ jeśli nie będzie mógł np. tego skompilować pod VC lub mingw.

Do agonii C++ długa droga - w końcu są setki projektów w tym języku. Ktoś musi je utrzymywać, dorabiać funkcje. To daje temu językowi długowieczność. Mam też swoją prywatną opinię - obecnie warto być programistą C++ bo: sporo ludzi idzie w rozwiązania web, Javę, C# - obserwacje z czasów studiowania. Widzę że większość ogłoszeń o pracę jednak nie dotyczy C++, a na przekór słychać że sporo firm ma problem ze znalezieniem nowych programistów C++, którzy mają jakieś doświadczenie i nie są zieloni. Nie zdziwię się, jeśli za 2-3 lata programista C++ będzie miał proponowane lepsze warunki pracy niż programiści innych języków. Oczywiście C++ trzeba lubić, a nie patrzeć na zarobki czy ilość ogłoszeń o pracę - bez tego człowiek będzie się męczył - ale tak jest w każdej materii.


Jeśli uważasz mój post za wartościowy - daj punkt.
Mój post pomógł Ci rozwiązać problem - zaznacz go. Pozdrawiam
Zobacz pozostałe 7 komentarzy
HO
Przez port rozumiem odrębny projekt. MinGW bazuje na GCC, lecz zawiera zmiany, które są specyficzne dla Windows. GCC obsługuje i 32 bit i 64. MinGW 64 bit natomiast jest rozwijany w innym projekcie. Nie znam przyczyn, nie wiem czy jest już gotowy do użycia(z 2 lata temu podobno było kulawo). Zapewne jest to spowodowane zmianami jakie Microsoft wprowadził dla systemów 64 bitowych. Poza tym problemem była/jest zamknięty system do którego nie ma dokumentacji.
KR
@vpiotr trochę ironizowałem; serio na poziom cen mają wpływ popyt, podaż, konkurencyjność rynku, itp. Może i programistów C++ będzie mało, ale też i projektów w C++ nie jest wcale tak wiele. W końcu ilu programistów ma szanse pracować przy systemach operacyjnych, przeglądarkach lub grach AAA (Indie już się też z powodzeniem w Javie / XNA / Flashu robi)?
vpiotr
@Krolik: Wniosek z tego jest taki: koniec z uniwersalizmem C/C++: C# na Windows, Objective-C na Mac, Java na Linux i reszcie...
Wibowit
czemu java na linux? java lata wszędzie, nawet w pralkach i lodówkach :p
Wibowit
generalnie w takim ubuntu w repozytorium jest (bardzo?) mało programów użytkowych w javie, za to sporo jest w pythonie
0

odnawiam temat: a co z androidem i C++ ( NDK ) i z mieszaniem JNI z C++( nie jestem pewien czy to sie tak odmienia ) ?
kiedy wyjda okulary wujka google, to android zaleje rynek po calosci, a to chyba kolejny + dla C++

Wibowit
  • Rejestracja:prawie 20 lat
  • Ostatnio:około 6 godzin
0

odnawiam temat: a co z androidem i C++ ( NDK ) i z mieszaniem JNI z C++( nie jestem pewien czy to sie tak odmienia ) ?

A co ma być? Jest i działa. Można np dobijać się z poziomu Javy do natywnego OpenGLa: https://play.google.com/store/apps/details?id=jme3test.android


"Programs must be written for people to read, and only incidentally for machines to execute." - Abelson & Sussman, SICP, preface to the first edition
"Ci, co najbardziej pragną planować życie społeczne, gdyby im na to pozwolić, staliby się w najwyższym stopniu niebezpieczni i nietolerancyjni wobec planów życiowych innych ludzi. Często, tchnącego dobrocią i oddanego jakiejś sprawie idealistę, dzieli od fanatyka tylko mały krok."
Demokracja jest fajna, dopóki wygrywa twoja ulubiona partia.
GD
  • Rejestracja:ponad 12 lat
  • Ostatnio:ponad 12 lat
  • Postów:39
2

Jesli chodzi o dylematy wypowiadajacej sie tu mlodziezy, zwiazane z kariera:

Miejsce C i C++ na rynku jest (i bedzie) ugruntowane nie ze wzgledu na wspaniale nowe cechy, którymi czesc forumowiczów lubi sie onanizowac, tylko ze wzgledu na to, ze zawsze beda istnialy dziedziny, w których nie kompromitujemy wydajnosci: systemy operacyjne, gry, przetwarzanie danych, wydajne serwisy sieciowe z mln uzytkowników. A do tego wystarczy ANSI C lub C++ w wersji sprzed 15 lat.

Pracuje w branzy finansowej, od 5 lat w C i caly czas zarabiam wiecej od moich kolegów Javowców. Naleze do ludzi, którzy zafascynowali sie sama koncepcja komputera, jak pracuje CPU, jak pracuje pamiec itp. Lubie kiedy duzo zalezy ode mnie i to mi po prostu sprawia frajde. I to wydaje mi sie wazniejsze niz rozwazania czy C++ systematycznie wzbogaca sie o nowe cechy czy nie. Póki co, nalezy do czolówki jezyków wykorzystywanych profesjonalnie i nie widze szansy, zeby to mialo sie szybko zmienic.

Poza tym, maintenance gotowego systemu, który napisal ktos inny jest zawsze nieporównywalnie bardziej nudny, niz tworzenie czegos od zera. Obojetnie, czy "krowa" powstala 30 lat temu w Cobolu czy 3 lata temu w Javie.


And remember, Beethoven wrote his first symphony in C.
KR
Moderator
  • Rejestracja:prawie 21 lat
  • Ostatnio:2 miesiące
  • Postów:2964
0

Pracuje w branzy finansowej, od 5 lat w C i caly czas zarabiam wiecej od moich kolegów Javowców

W jednej firmie jest tak, w innej jest inaczej. Patrząc jednak na średnie zarobków podawanych np. na indeed.com, to...

http://www.indeed.com/salary?q1=C+developer&l1=&tm=1
http://www.indeed.com/salary?q1=C%2B%2B+developer&l1=
http://www.indeed.com/salary?q1=Java+developer&l1=&tm=1

http://www.indeed.com/salary?q1=C+senior+developer&l1=&tm=1
http://www.indeed.com/salary?q1=C%2B%2B+senior+developer&l1=
http://www.indeed.com/salary?q1=Java+senior+developer&l1=&tm=1

...nie widać bardzo dużej różnicy, ale jeśli jest to jednak na korzyść Javowców.

Miejsce C i C++ na rynku jest (i bedzie) ugruntowane nie ze wzgledu na wspaniale nowe cechy, którymi czesc forumowiczów lubi sie onanizowac, tylko ze wzgledu na to, ze zawsze beda istnialy dziedziny, w których nie kompromitujemy wydajnosci: systemy operacyjne, gry, przetwarzanie danych, wydajne serwisy sieciowe z mln uzytkowników

Chciałbym zauważyć, że z tych rzeczy, które wymieniłeś, C++ jest mocno używany jedynie w grach. W systemach operacyjnych głównego nurtu nigdy się naprawdę nie przebił (kernel Windows: C, kernel Linuksa: C, kernel wszelkiej maści Uniksów, w tym OSX: C, Symbian miał coś tam w C++, ale była to maskra i Nokia go zaorała).Było parę eksperymentalnych systemów napisanych w C++, ale równie dobrze było też parę eksperymentalnych napisanych w C# lub Javie. W masowym przetwarzaniu danych i serwisach sieciowych z dużą liczbą użytkowników został wyparty niemal całkowicie przez Javę, no może poza Googlem, który jeszcze twardo obstaje przy BigTable (ale Amazon, Twitter, Facebook, Walmart, Netflix, EBay, MySpace - wszystko chodzi na Javie jeśli chodzi o warstwę danych czy analitykę).

edytowany 3x, ostatnio: Krolik
Zobacz pozostały 1 komentarz
KR
Nie ma wyjątków, nie ma STLa, nie ma Boosta, to nie C++ tylko C z klasami.
Endrju
A Ty kod Windowsa widziałeś, czy co?
Wibowit
czyli zamiana metoda(struktura) na obiekt.metoda() i tyle? dziedziczenie jakieś mają?
Wibowit
to "tak" to do kogo było?
GD
  • Rejestracja:ponad 12 lat
  • Ostatnio:ponad 12 lat
  • Postów:39
0
Krolik napisał(a):

W masowym przetwarzaniu danych i serwisach sieciowych z dużą liczbą użytkowników został wyparty niemal całkowicie przez Javę, no może poza Googlem, który jeszcze twardo obstaje przy BigTable

Google - a co to za firma? Musi byc jakas mala, której pewnie nie stac na dobrych programistów... Podobnie jak te, w których ja pracowalem przez ostatnie 10 lat :) Ilosc Javowców vs C jest mniej wiecej 50/50. (I nawet oni przeklinali Eclipse'a).


And remember, Beethoven wrote his first symphony in C.
edytowany 1x, ostatnio: gd
Zobacz pozostałe 2 komentarze
KR
Na takiej podstawie, że rozmawiałem z ludźmi pracującymi w Google, zarówno tymi kodującymi w C++ jak i tymi kodującymi w Javie. Poza tym zauważ też, że większość ważnych serwisów Google ma serverside napisany w Javie (dokładniej GWT). C++ używają, ale raczej w zastosowaniach takich jak przetwarzanie realtime, np. w autonomicznych samochodach.
KR
BTW: Ten ich C++ też jest raczej daleko od stylu lansowanego przez Alexandrescu - nie wolno stosować wyjątków, nie wolno praktycznie nic robić w konstruktorach poza ustawieniem wartości domyślnych, Boost dozwolony wybiórczo, spore części STLa zabronione (iostream - i słusznie), C++11 zabronione całkowicie.
vpiotr
@Krolik: takie okrajanie to standard jeśli pracujesz w korporacji. Inaczej każdy by wprowadzał zależności od softwaru zewnętrznego ad-hoc i musieliby się ciągle aktualizować. To co wymieniłeś to można zaakceptować - sam zastanawiam się w swoich nawet domowych projektach czy na pewno chcę wprowadzić kolejną zależność - jeśli możesz coś mieć mniejszym kosztem to lepiej unikać dodatkowego softu.
GD
W mojej firmie tez panuja scisle standardy kodowania, ograniczajace fantazje do minimum. Powodzenie duzych projektów w biznesie opiera sie na czyms innym niz eksperymentowanie i korzystanie z nowinek (nie mówie o awangardowych projektach takich firm jak Google, tylko o "zwyklych" systemach do obslugi biznesu).
KR
Heca polega na tym, że dla Javy czy C# takich rzeczy nie trzeba robić. Owszem, uzgadnia się takie drobiazgi jak styl wcięć itp., ale nie zabrania się korzystania z podstawowych elementów języka i biblioteki standardowej - używa się pełnego języka. Z C++ jest właśnie ten problem, że nie jest "programmer portable" - tj. możesz zebrać 10 programistów C++ i może się okazać, że każdy pod pojęciem C++ zna zupełnie inny język :D
Endrju
  • Rejestracja:około 22 lata
  • Ostatnio:ponad rok
3
gd napisał(a):

Google - a co to za firma? Musi byc jakas mala, której pewnie nie stac na dobrych programistów...

Wait, what?


"(...) otherwise, the behavior is undefined".
Kliknij, aby dodać treść...

Pomoc 1.18.8

Typografia

Edytor obsługuje składnie Markdown, w której pojedynczy akcent *kursywa* oraz _kursywa_ to pochylenie. Z kolei podwójny akcent **pogrubienie** oraz __pogrubienie__ to pogrubienie. Dodanie znaczników ~~strike~~ to przekreślenie.

Możesz dodać formatowanie komendami , , oraz .

Ponieważ dekoracja podkreślenia jest przeznaczona na linki, markdown nie zawiera specjalnej składni dla podkreślenia. Dlatego by dodać podkreślenie, użyj <u>underline</u>.

Komendy formatujące reagują na skróty klawiszowe: Ctrl+B, Ctrl+I, Ctrl+U oraz Ctrl+S.

Linki

By dodać link w edytorze użyj komendy lub użyj składni [title](link). URL umieszczony w linku lub nawet URL umieszczony bezpośrednio w tekście będzie aktywny i klikalny.

Jeżeli chcesz, możesz samodzielnie dodać link: <a href="link">title</a>.

Wewnętrzne odnośniki

Możesz umieścić odnośnik do wewnętrznej podstrony, używając następującej składni: [[Delphi/Kompendium]] lub [[Delphi/Kompendium|kliknij, aby przejść do kompendium]]. Odnośniki mogą prowadzić do Forum 4programmers.net lub np. do Kompendium.

Wspomnienia użytkowników

By wspomnieć użytkownika forum, wpisz w formularzu znak @. Zobaczysz okienko samouzupełniające nazwy użytkowników. Samouzupełnienie dobierze odpowiedni format wspomnienia, zależnie od tego czy w nazwie użytkownika znajduje się spacja.

Znaczniki HTML

Dozwolone jest używanie niektórych znaczników HTML: <a>, <b>, <i>, <kbd>, <del>, <strong>, <dfn>, <pre>, <blockquote>, <hr/>, <sub>, <sup> oraz <img/>.

Skróty klawiszowe

Dodaj kombinację klawiszy komendą notacji klawiszy lub skrótem klawiszowym Alt+K.

Reprezentuj kombinacje klawiszowe używając taga <kbd>. Oddziel od siebie klawisze znakiem plus, np <kbd>Alt+Tab</kbd>.

Indeks górny oraz dolny

Przykład: wpisując H<sub>2</sub>O i m<sup>2</sup> otrzymasz: H2O i m2.

Składnia Tex

By precyzyjnie wyrazić działanie matematyczne, użyj składni Tex.

<tex>arcctg(x) = argtan(\frac{1}{x}) = arcsin(\frac{1}{\sqrt{1+x^2}})</tex>

Kod źródłowy

Krótkie fragmenty kodu

Wszelkie jednolinijkowe instrukcje języka programowania powinny być zawarte pomiędzy obróconymi apostrofami: `kod instrukcji` lub ``console.log(`string`);``.

Kod wielolinijkowy

Dodaj fragment kodu komendą . Fragmenty kodu zajmujące całą lub więcej linijek powinny być umieszczone w wielolinijkowym fragmencie kodu. Znaczniki ``` lub ~~~ umożliwiają kolorowanie różnych języków programowania. Możemy nadać nazwę języka programowania używając auto-uzupełnienia, kod został pokolorowany używając konkretnych ustawień kolorowania składni:

```javascript
document.write('Hello World');
```

Możesz zaznaczyć również już wklejony kod w edytorze, i użyć komendy  by zamienić go w kod. Użyj kombinacji Ctrl+`, by dodać fragment kodu bez oznaczników języka.

Tabelki

Dodaj przykładową tabelkę używając komendy . Przykładowa tabelka składa się z dwóch kolumn, nagłówka i jednego wiersza.

Wygeneruj tabelkę na podstawie szablonu. Oddziel komórki separatorem ; lub |, a następnie zaznacz szablonu.

nazwisko;dziedzina;odkrycie
Pitagoras;mathematics;Pythagorean Theorem
Albert Einstein;physics;General Relativity
Marie Curie, Pierre Curie;chemistry;Radium, Polonium

Użyj komendy by zamienić zaznaczony szablon na tabelkę Markdown.

Lista uporządkowana i nieuporządkowana

Możliwe jest tworzenie listy numerowanych oraz wypunktowanych. Wystarczy, że pierwszym znakiem linii będzie * lub - dla listy nieuporządkowanej oraz 1. dla listy uporządkowanej.

Użyj komendy by dodać listę uporządkowaną.

1. Lista numerowana
2. Lista numerowana

Użyj komendy by dodać listę nieuporządkowaną.

* Lista wypunktowana
* Lista wypunktowana
** Lista wypunktowana (drugi poziom)

Składnia Markdown

Edytor obsługuje składnię Markdown, która składa się ze znaków specjalnych. Dostępne komendy, jak formatowanie , dodanie tabelki lub fragmentu kodu są w pewnym sensie świadome otaczającej jej składni, i postarają się unikać uszkodzenia jej.

Dla przykładu, używając tylko dostępnych komend, nie możemy dodać formatowania pogrubienia do kodu wielolinijkowego, albo dodać listy do tabelki - mogłoby to doprowadzić do uszkodzenia składni.

W pewnych odosobnionych przypadkach brak nowej linii przed elementami markdown również mógłby uszkodzić składnie, dlatego edytor dodaje brakujące nowe linie. Dla przykładu, dodanie formatowania pochylenia zaraz po tabelce, mogłoby zostać błędne zinterpretowane, więc edytor doda oddzielającą nową linię pomiędzy tabelką, a pochyleniem.

Skróty klawiszowe

Skróty formatujące, kiedy w edytorze znajduje się pojedynczy kursor, wstawiają sformatowany tekst przykładowy. Jeśli w edytorze znajduje się zaznaczenie (słowo, linijka, paragraf), wtedy zaznaczenie zostaje sformatowane.

  • Ctrl+B - dodaj pogrubienie lub pogrub zaznaczenie
  • Ctrl+I - dodaj pochylenie lub pochyl zaznaczenie
  • Ctrl+U - dodaj podkreślenie lub podkreśl zaznaczenie
  • Ctrl+S - dodaj przekreślenie lub przekreśl zaznaczenie

Notacja Klawiszy

  • Alt+K - dodaj notację klawiszy

Fragment kodu bez oznacznika

  • Alt+C - dodaj pusty fragment kodu

Skróty operujące na kodzie i linijkach:

  • Alt+L - zaznaczenie całej linii
  • Alt+, Alt+ - przeniesienie linijki w której znajduje się kursor w górę/dół.
  • Tab/⌘+] - dodaj wcięcie (wcięcie w prawo)
  • Shit+Tab/⌘+[ - usunięcie wcięcia (wycięcie w lewo)

Dodawanie postów:

  • Ctrl+Enter - dodaj post
  • ⌘+Enter - dodaj post (MacOS)