Java vs C++

PL
  • Rejestracja:ponad 7 lat
  • Ostatnio:około 4 lata
  • Postów:36
0

Witam, chciałbym się dowiedzieć który język jest praktyczniejszy. Który z nich ma większą 'moc', tj. pozwala nam na rozwiązanie większej ilości problemów itd. Ktoś gdzieś kiedyś pisał że jest to Java i odniósł się do głupich Programming Challenges, w których nie wszystkie ćwiczenia dało się napisać w c++ a w javie tak (?). Nie wiem czy to prawda, dlatego chciałbym aby ktoś mi to rozjaśnił.

daniel1302
  • Rejestracja:ponad 16 lat
  • Ostatnio:17 dni
0

Wszystko co napiszesz w Javie jest do napisania w C++, ale nie wszystko warto pisać w C++, NIE MA czegoś takiego jak język, który pozwala na rozwiązanie większej ilości problemów. Jeśli tak mamy patrzeć to jest to C++. Natomiast jeśli mamy patrzeć na praktyczność to jest to Java, bo łatwiej się w niej pisze, i głównie w Javie powstają aplikacje klasy enterprise. Wszystko zależy od tego co chcesz robić, i tak z biegiem czasu przesiądziesz się na inny język, będziesz musiał znać kilka...


Head of the pprof.
Zobacz pozostałe 2 komentarze
Patryk27
W sensie dlaczego C++ jest bardziej uniwersalny?
daniel1302
No w sensie, że w Javie ciężej jest pisać systemy Embeded, np wyobraź sobie ładowanie VM Javy do mikroprocesora, gdzie jest 256 kb ram. Dodatkowo, pisanie wszelakich sterowników - chyba, że będziesz jakimś cudem kompilował Javę, ale to już wychodzi poza granice bo w takim przypadku mogę pisać wszystkow Bashu o ile napisze jakiś kompilator do kodu maszynowego. Dodatkowo W C++ można pisać cały wachlarz aplikacji uzytkowych, od aplikacji konsolowych poprzez okienkowe a nawet strony www poprzez CGI. Za to Java wymięka w tym niskopoziomowym zakresie zastosowań.
daniel1302
Może w poście źle to ująłem ale właśnie o to mi chodziło.
Patryk27
wyobraź sobie ładowanie VM Javy do mikroprocesora, gdzie jest 256 kb ram - z 256Kb pamięci nie takie rzeczy można zrobić: http://www.harbaum.org/till/nanovm/index.shtml, poza tym istnieją nawet procesory potrafiące bezpośrednio wykonywać bajtkod Javy :-) W C++ można pisać cały wachlarz aplikacji uzytkowych, od aplikacji konsolowych poprzez okienkowe a nawet strony www poprzez CGI. - no tak, w Javie nie można pisać ani aplikacji konsolowych, ani okienkowych, ani stron internetowych.
daniel1302
można ale pisanie sterowników już niekoniecznie :D Tak wiem, że istnieją procesory które są w stanie wykonywać Jave, ale nie jest to raczej często sotykane. po prostu do tego sprawdza się C/C++
jarekr000000
  • Rejestracja:ponad 8 lat
  • Ostatnio:14 minut
  • Lokalizacja:U krasnoludów - pod górą
  • Postów:4707
5
  1. NIe wierz we wszystko co ktoś gdzieś napisał.
  2. Oba języki sa Turing Complete
  3. Ale z pewnością pisanie sterownikow do np. linuxa jest w Javie bardziej niemożliwe niż w C++ .
  4. W Javie łatwiej ci się będzie nauczyć jeśli niewiele programowania umiesz
  5. Oba języki są dośc stare i mnóstwo przykładów w internecie pokazuje tak naprawdę: jak nie należy programować. Z tym, że w C++ jest IMO gorzej.

jeden i pół terabajta powinno wystarczyć każdemu
edytowany 5x, ostatnio: jarekr000000
pingwindyktator
  • Rejestracja:ponad 12 lat
  • Ostatnio:około 2 miesiące
  • Lokalizacja:Kraków
  • Postów:1055
0

"Ktoś gdzieś kiedyś pisał że jest to Java i odniósł się do głupich Programming Challenges, w których nie wszystkie ćwiczenia dało się napisać w c++ a w javie tak"
bzdura


do not code, write prose
0

W Javie nie napiszesz systemu komputerowego, kompilatorów, przeglądarek i sterowników, czy wydajnych gier na PC i Konsole, a w C++ już tak. Jest więcej zastosowań C++. Obecnie uczę się C++17, jak dla mnie bez obiektowości łatwiej załapać podstawy. Nawet nie ma książki do Javy która nie wymaga znajomości C++.

JA
Dlaczego nie można napisać kompilatora w Javie?
flowCRANE
Niektórzy wolą bredzić, niż choćby do Google zajrzeć, przed wysłaniem swoich bredni. Jest zasadnicza różnica między „nie napisze się” a „można napisać, ale jest trudno lub niezbyt się to nadaje”.
koszalek-opalek
  • Rejestracja:około 9 lat
  • Ostatnio:ponad 2 lata
1
Wesoły Mleczarz napisał(a):

W Javie nie napiszesz systemu komputerowego, kompilatorów, przeglądarek i sterowników, czy wydajnych gier na PC i Konsole, a w C++ już tak. Jest więcej zastosowań C++. Obecnie uczę się C++17, jak dla mnie bez obiektowości łatwiej załapać podstawy. Nawet nie ma książki do Javy która nie wymaga znajomości C++.

Bzdury, nie cierpię Javy, ale wszystko to, co napisałeś wyżej w Javie da się napisać.

W ogóle, trzeba się uczyć programować, nie języka. Więc wybierz język (najlepiej Pythona) i naucz się porządnie programować. A jak jakiś projekt będzie wymagał Javy czy C++, to się nauczysz...

jarekr000000
  • Rejestracja:ponad 8 lat
  • Ostatnio:14 minut
  • Lokalizacja:U krasnoludów - pod górą
  • Postów:4707
1
Wesoły Mleczarz napisał(a):

W Javie nie napiszesz systemu komputerowego, kompilatorów, przeglądarek i sterowników, czy wydajnych gier na PC i Konsole, a w C++ już tak. Jest więcej zastosowań C++. Obecnie uczę się C++17, jak dla mnie bez obiektowości łatwiej załapać podstawy. Nawet nie ma książki do Javy która nie wymaga znajomości C++.

Moja ulubiona gra jest Javie (MineCraft/ ViveCraft) -chlip chlip.
Kompilator Javy jest Napisany w Javie.
Kompilator Kotlina jest w Javie (i w Kotlinie).
Przeglądarki są w javie (słabe ale są).
Tylko sterowniki słabo - normalna java do hard RT się nie nadaje.


jeden i pół terabajta powinno wystarczyć każdemu
Zobacz pozostałe 7 komentarzy
jarekr000000
@Ktos: nie testowałem tej wersji, ale z to nadal po prostu rozwój Minecraft PE/Bedrock. W zasadzie mody i mulitplayer osobny od normalnej wersji. Trochę bugów. Ale w sumie ciekawe, mogę zrobić test tej wersji i porównać z oryginałem.
satirev
Zakładam, że ten Minecraft w sklepie Microsoftu to po prostu wersja UWP.
jarekr000000
@Ktos trudno niestety wersje porównać. Bo nie można światów tych samych zaimportować. Wersja Winsdows 10 widać, że zapiernicza, ale nie za bardzo można zobaczyć fps, komendy, klawisze nie działają. Normalny minecraft (_ mdy na światło i takie tam) mi miedzy 230 a 450 fps (na otwartym terenie) wyciąga (nie wiem po co - ludzkie oko widzi tylko...
FE
Ludzkie oko widzi całkiem sporo, inna sprawa czy masz monitor z rozsądnym odświeżaniem...
0

Wszystko się sprowadza do rozwiązania kilku równań matematycznych i to nieważne jaki język do tego użyjesz, a rozwiążesz każdy problem.

1

Taki będzie działa ten kompilator jak ten system JavaOS, niby można ale. Rozumiem fanbojstwo niektórych z was i ożenek z Javą aż po grób. Nie bez powodu to forum w innych miejscach sieci ma opinię pro Javowego ;) Czasami mam wrażenie, że tak boicie się aby nie stracić posadki programisty Javy, że nie jesteście w stanie nauczyć się drugiego, czy innego języka programowania.

vpiotr
Ja bym powiedział że to forum jest raczej pro-pascalowe. I mam na to co najmniej dwa dowody: @me, @furious programming :D
flowCRANE
Ja nie jestem fanboy'em Pascala – tym bardziej że znam o wiele więcej słabych punktów tej technologii, niż niejeden hejter. Ale trolle i tak wiedzą swoje. ;)
0

Usuń wszystko z komputera co jest napisane w c++ a pozniej na odwrót i bedziesz widział potęge c++.

Wibowit
  • Rejestracja:około 20 lat
  • Ostatnio:minuta
0

Czasami mam wrażenie, że tak boicie się aby nie stracić posadki programisty Javy, że nie jesteście w stanie nauczyć się drugiego, czy innego języka programowania.

A to nauka kolejnego języka programowania jest powodem do wyrzucenia z pracy? Po godzinach to można i w COBOLu pisać dla przyjemności - co to kogo obchodzi?


"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.
Azarien
  • Rejestracja:ponad 21 lat
  • Ostatnio:około 8 godzin
3
Wesoły Wąż napisał(a):

Wszystko się sprowadza do rozwiązania kilku równań matematycznych i to nieważne jaki język do tego użyjesz, a rozwiążesz każdy problem.

Każdy problem algorytmiczny - na sucho, tak.

Ale nie każdy problem jest algorytmiczny. Problem może być np. z dostępem do urządzeń wejścia-wyjścia.
Na przykład możemy mieć język skryptowy, kompletny w sensie Turinga i w ogóle. Ale działa we własnej małej piaskownicy i nie udostępnia np. interfejsu do generowania grafiki. I co zrobisz? Nic nie zrobisz. Przynajmniej nie w tym języku.

Albo musisz użyć biblioteki X. Biblioteka okazuje się jednak że intensywnie wykorzystuje model obiektowy języka Y, a ty chciałeś pisać w Z. I co zrobisz? Nic nie zrobisz. Przynajmniej nie w Z.

Dlatego nie, nie wszystko sprowadza się do „rozwiązania kilku równań matematycznych”, i jest ważne jakiego języka używasz. Z wielu powodów.

edytowany 1x, ostatnio: Azarien
Wibowit
  • Rejestracja:około 20 lat
  • Ostatnio:minuta
1

chciałbym się dowiedzieć który język jest praktyczniejszy. Który z nich ma większą 'moc', tj. pozwala nam na rozwiązanie większej ilości problemów itd

Na nogach dojdziesz do wielu więcej miejsc niż jadąc samochodem. Chodzenie na nogach ma więc większą moc niż jazda samochodem. Czy to czyni je praktyczniejszym?


"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.
jarekr000000
Jak już bym miał wybierać ,to wolę być bez samochodu niż bez nóg.
vpiotr
  • Rejestracja:ponad 13 lat
  • Ostatnio:prawie 3 lata
2

To ja może trochę o tej Mocy, chociaż wiem że wątek i tak zaraz zejdzie na GC i inne oczywistości.

  1. Programming Challenges
    Da się w obu językach. Większość tego typu serwisów wspiera oba te języki. Sam rozwiązuję zadania głównie w Javie.

C++:

  • trzeba trochę podrasować I/O: Wymuszanie wysokiej wydajności iostream
  • ma typ unsigned - przydaje się w algorytmach
  • programowanie funkcyjne na razie chyba raczkuje (aczkolwiek chętnie usłyszę że nie mam racji)

Java:

  • ma więcej wbudowanych kontenerów,
  • ma BigDecimal / BigInteger,
  • ma jedną formę przesyłania obiektów (prostsza składnia) zamiast n form (w C++ masz wskaźniki, przez wartość, smart pointery, const/nie const, referencje...) - w Javie skupiasz się na problemie a nie na języku
  • typ tablicowy ma rozmiar
  1. Praktyczność.
    Trudne zagadnienie. Zależy co jest Twoim priorytetem.

a) jeśli przenośność uruchamialnego programu na każdym popularnym systemie to Java jest lepsza - udostępniasz plik .jar i ktoś sobie to uruchamia jednym poleceniem. W C++ musisz dostarczyć odrębny EXE dla każdego systemu.

b) jeśli przenośność uruchamialnego programu na konkretnym systemie, to C++ jest lepsze - nie wymaga żadnych dodatkowych pakietów na docelowej maszynie (Java wymaga JRE - w tej czy innej formie).

c) jeśli przenośność na poziomie źródeł, to w Javie musisz się mniej martwić o środowisko, ponieważ dużą część tych tematów załatwia Ci JDK - w nim masz GUI, obsługę unicode, wątki i kontenery wielowątkowe, (powiedzmy) uniwersalną obsługę systemu plików, generator dokumentacji, monitor aplikacji i jest mniejsza różnorodność kompilatorów, więc mniejsze prawdopodobieństwo że komuś coś się nie skompiluje

d) jeśli dostęp do natywnych rozwiązań popularnego systemu (pamięć współdzielona, log systemowy, wywołania systemowe, moduły kernela, sterowniki) to w samej Javie może to być niemożliwe, albo na poziomie "odkrycie atomu" o ile nie masz API. Sytuację ratuje JNI, JNA, JNR.

e) jeśli dostęp do natywnych API bardziej niszowego systemu to o ile w ogóle masz JRE na tej maszynie, może się okazać, że jesteś sam (jeśli nie ma dostępnego wrappera)

f) jeśli chodzi o ogólny rynek pracy to Java dzisiaj wygrywa jeśli chodzi o liczbę ofert. Nie wiem jak z zakresem pensji.

g) szacuję (nie badałem), że jeśli chodzi o pracę w HPC to w Javie pracy pewnie będzie mniej ofert. Przykład na UK indeed.com:

  • "c++ hpc" - 41 ofert
  • "java hpc" - 17 ofert

h) w gamedev raczej przyda się bardziej C++

i) w HFT raczej rynek skłania się ku Javie (@katelx coś o tym wspominała). Pewnie ze względu na łatwość dołączania pluginów i większą kontrolę nad nimi.

0

Jedyny język programowania jaki może kiedyś zagrozić Javie to Javascript/Node lub Python. Ewentualnie powstanie coś nowego lepszego od programowania obiektowego i funkcyjnego.

jarekr000000
  • Rejestracja:ponad 8 lat
  • Ostatnio:14 minut
  • Lokalizacja:U krasnoludów - pod górą
  • Postów:4707
0

Jest rok 2018, w C++ o ile mi wiadomo nadal nie ma sensownego, popularnego dependency managera. Żadnego mavena, ivy. Co jakis czas ktoś nowy ogłasza, potem to i tak jakby umiera (conan).
Z perspektywy typowego javowca, który między śniadaniem a lunchem dociąga do projektu 4 biblioteki do logowania, jedną do FFT i trzy do jsona to troszkę absurdalne.


jeden i pół terabajta powinno wystarczyć każdemu
edytowany 1x, ostatnio: jarekr000000
satirev
conan nie umarł/nie umiera, ostatnio wydali (w końcu) wersję 1.0.
vpiotr
Też nie korzystam z żadnego w C++, jest jeszcze backaroo ale nie wiem czy coś wart. Może @kq lub @Spine coś znają?
pingwindyktator
gradle, nuget. mavena można do C++ podłączyć również, ale to już niezbyt mądre. Często jednak wystarcza (o dziwo!) sam cmake, ale w C++ o ile mi wiadomo nadal nie ma sensownego, popularnego dependency managera to bzdura.
kq
Jak dla mnie to w pełni prawda. Niestety.
Azarien
zacznijmy od tego że “dependency manager” w C++ jest jakby mniej potrzebny i można sobie poradzić bez niego.
katelx
  • Rejestracja:około 10 lat
  • Ostatnio:5 miesięcy
  • Lokalizacja:Hong Kong
6

skoro juz zostalam wspomniana to odezwe sie w tej bezsensownej dyskusji (bo tak naprawde tu nie ma o czym dyskutowac, java jest duzo latwiejsza i duzo popularniejsza, chcesz szybko zarabiac to ucz się javy).
pewnie wzbudzi to kontrowersje ale z mojego doswiadczenia wynika ze dobrze zoptymalizowana java jest generalnie szybsza od dobrze zoptymalizowanego c++, pisze tu o duzych, zlozonych systemach pisanych przez kumatych ludzi, nastawionych na low latency/high throughput a nie o prostych benchmarkach udowadniajacych kto ma wiekszego.
swoja droga to nie ma czegos takiego jak uhft w standardowym c++, bo wiekszosc standardowych abstrakcji jest za wolna, alokatory pisze sie samodzielnie a poleganie na UB jest na porzadku dziennym. z java czy c# jest zreszta podobnie, uzywany jest bardzo maly podzbior jezyka/frameworka, co ma znaczenie to umiejetnosc sprowadzenia problemu do O(1), brak pauz, cache-friendly struktury, no-copy i/o i przede wszystkim dobry sprzet/siec.

Zobacz pozostałe 4 komentarze
pingwindyktator
Ale jak dodatkowa warstwa po drodze (nawet robiąca cuda) może być szybsza od braku takiej warstwy? Może jakieś konkretne benchmarki macie?
AM
https://blog.takipi.com/java-on-steroids-5-super-useful-jit-optimization-techniques/ Po prost jit moze w pewnych sutuacjach duzo lepiej zoptymalizować kod.
pingwindyktator
Każda z tych rzeczy w C++ od zawsze jest robiona w compile time. Oprócz wspomnianej rekompilacji kodu, za to z setką innych optymalizacji.
AM
No wlasnie compile time przewaznie jest gorsze niż runtime w tym wypadku. Zreszta po to jest profile guide optimization, z którego i tak mało kto korzysta. Ale i tak przy jit takie profile guide wymięka.
katelx
@pingwindyktator: Możesz przybliżyć nam te tajniki optymalizowania javy? chodzi ci o powolne kawalki kodu vs te szybsze? ;) "tajniki" sa podobne jak w c++ co zreszta napisalam w poscie. nie zrozum nie zle, jak zaznaczylam, mysle ze przy analizie dowolnego, ograniczonego problemu c++ praktycznie zawsze pobije jave jesli chodzi o wydajnosc, natomiast przy duzym, ale dobrze zaplanowanym projekcie JIT pozwala wyprzedzic wysilki zespolu natywnych koderow.
pingwindyktator
  • Rejestracja:ponad 12 lat
  • Ostatnio:około 2 miesiące
  • Lokalizacja:Kraków
  • Postów:1055
0

> java
> przede wszystkim dobry sprzet


do not code, write prose
edytowany 1x, ostatnio: pingwindyktator
flowCRANE
markdown wspiera \ do escapowania – tak na przyszłość.
FE
  • Rejestracja:ponad 11 lat
  • Ostatnio:około 3 lata
0
placeg napisał(a):

Który z nich ma większą 'moc', tj. pozwala nam na rozwiązanie większej ilości problemów itd.[...] Nie wiem czy to prawda, dlatego chciałbym aby ktoś mi to rozjaśnił.

Powtarząjąc innych i odpowiadając - C++ ma większą 'moc'.
C++ ma też zdecydowanie najwięszy udział wśród języków wykorzystywanych w turniejach algorytmicznych.

W świecie hardcorowych projektów też głównie C++, ewentualnie C (AI, rakiety, systemy operacyjne, roboty, łaziki, computer vision etc.). Trochę jest to przygnębiające, że przez ostatnie kilka dekad nie powstało nic lepszego co by się przyjeło na tym poziomie. Obecnie Rust chyba trochę kandyduje ale nie wiem na ile to hype a na ile realnie ma szanse.


Wibowit
  • Rejestracja:około 20 lat
  • Ostatnio:minuta
0

Obecnie Rust chyba trochę kandyduje ale nie wiem na ile to hype a na ile realnie ma szanse.

Rust jest zdecydowanie bardziej ludzki od C++ i ma te same zalety nad językami zarządzanymi. Rustowy postęp to zdecydowanie lepsza składnia i zachowanie kompilatora - ilość gwarancji które daje Rust jest znacznie większa (mechanizm ownership i borrowing, mało upierdliwych UB i implementation defined), a komunikaty błędów od kompilatora są bardziej przyjazne i pomocne. Jeśli miałbym wybierać między C++, a Rustem to zdecydowanie (bezapelacyjnie, jak Bogusław Linda) wybrałbym Rusta. Więcej - teraz piszę hobbystycznie program w Ruście. Ogólnie jednak numerem 1. dla mnie jest Scala :)


"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.
edytowany 3x, ostatnio: Wibowit
AM
  • Rejestracja:około 12 lat
  • Ostatnio:12 dni
  • Postów:196
1
jarekr000000 napisał(a):

Jest rok 2018, w C++ o ile mi wiadomo nadal nie ma sensownego, popularnego dependency managera. Żadnego mavena, ivy. Co jakis czas ktoś nowy ogłasza, potem to i tak jakby umiera (conan).
Z perspektywy typowego javowca, który między śniadaniem a lunchem dociąga do projektu 4 biblioteki do logowania, jedną do FFT i trzy do jsona to troszkę absurdalne.

Tak, tooling to jeden z największych problemów c++. A kolejny może nawet większy to masa betonowych ludzi. Którzy na takiego conana odpowiadaja klasykiem

Mimo że sam nie wyobrażam sobie dzisiaj pisać w czymś starszym niż c++11, to jednak zmiany c++11,14,17 mimo że wiele rzeczy uproszczają, to sprawiły że c++ stał się znacznie cięższy Javy.

Weź pokaż i wytłumacz
http://en.cppreference.com/w/cpp/language/value_category
osobie piszącej w Javie.

W pracy ostatnio kilku core java programistów, musiało się dokształcić, żeby móc pomóc w c++'owych projektach. I teraz hasła w stylu

  • tu musi byc ref
  • tu const ref
  • tu value i move
  • tu masz const ref to nie dawaj move
  • tu masz ref i powinienes move
  • tu masz ref i nie powinienes move
    itp.....
    są na porządku dziennym.
    Nie dziwie się, że ich zdanie o c++ jest tylko jedno, c++ = WTF

A w javie, przesyłam parametr, to przesyłam i tyle.

katelx napisał(a):

java jest duzo latwiejsza i duzo popularniejsza, chcesz szybko zarabiac to ucz się javy).
Zgadzam się w 100%. Chociaż w Polskich warunkach, powiedziałbym, chcesz szybko dużo zarabiać ucz się js.

pewnie wzbudzi to kontrowersje ale z mojego doswiadczenia wynika ze dobrze zoptymalizowana java jest generalnie szybsza od dobrze zoptymalizowanego c++, pisze tu o duzych, zlozonych systemach pisanych przez kumatych ludzi, nastawionych na low latency/high throughput a nie o prostych benchmarkach udowadniajacych kto ma wiekszego.

Aplikacje o których mówisz i tak się pisze zupełnie inaczej. To nie jest typowa java/c++. Bo co to za c++ kiedy 90% czasu spędzasz z godboltem patrząc jak kompilator zrobił i tak co innego niż myślałeś.
A w Javie, pokaż ten zoptymalizowany kod to ide o zakład że, 95% z programistów Javy na pierwszy rzut okiem nie pozna że, to Java.

edytowany 1x, ostatnio: amd
Zobacz pozostałe 3 komentarze
flowCRANE
Przy okazji – value category? A komu to potrzebne? :P
AM
Ok ten value category to overkill. Ale juz ref, const ref, rvalue, value potrzebne jest.
flowCRANE
Żartowałem. Musisz się uodpornić na takie zaczepki.
AM
Nie no czemu, fakt, przez pryzmat tłumaczenia roznych typow osobie z javy, to sie zgadzam, komu to potrzebne.
katelx
95% z programistów Javy na pierwszy rzut okiem nie pozna że, to Java poznaja po rozwleklosci ;)
pingwindyktator
  • Rejestracja:ponad 12 lat
  • Ostatnio:około 2 miesiące
  • Lokalizacja:Kraków
  • Postów:1055
0
amd napisał(a):
  • tu musi byc ref
  • tu const ref
  • tu value i move
  • tu masz const ref to nie dawaj move
  • tu masz ref i powinienes move
  • tu masz ref i nie powinienes move
    itp.....
    są na porządku dziennym.
    Nie dziwie się, że ich zdanie o c++ jest tylko jedno, c++ = WTF

No spoko, ale chyba nie sądzisz, że programista C++ też sie nad tym zastanawia. Fakt, C++ jest expert-friendly, ale jak już jesteś bardziej "expert" niż "junior", to serio takie problemy znajdziesz tylko na 4programmers...


do not code, write prose
AM
Hmm ja sie zastanawiam. A mam 10+ lat w c++. W sumie nie znam nikogo dobrego kto sie nad tym nie zastanawia. A przy review, zastanawiam się drugie tyle. Przy javie nie zastanawiam się wcale.
pingwindyktator
Brak porządnego doświadczenia to już bardzo osobista sprawa i nic nie mogę tutaj powiedzieć.
AM
Dlaczego oceniasz moje doswiadczenie, nie majac pojecia jak ono wygląda. To nie rozsądne.
Wibowit
To jest przykład dla którego lepiej wybrać Rusta. Kompilator Rusta sam sprawdza gdzie ma być ref, move, const itp itd i dostajemy czytelny błąd kompilacji.
AM
Rust ma mase ciekawych rozwiazan i dobry tooling. Myśle że będzie coraz bardziej popularny. Jest to aktualnie nr1 jezyk którego się muszę nauczyć.
0

A ja mam takie pytanie, czy w ogóle ma powstać jakiś nowy standard języka C w przyszłych latach? Jest coś zaplanowane? Jak rozumiem C jest mniejsze i trochę prostsze od C++?

Wibowit
Znacznie prostsze jeśli chodzi o sam język i bibliotekę standardową.
Wibowit
  • Rejestracja:około 20 lat
  • Ostatnio:minuta
0

W 2011 roku wyszła nowa wersja C (C11). Poprzednia była z roku 1999. Pełna lista jest tutaj: https://en.wikipedia.org/wiki/ANSI_C#History_and_outlook
Ekstrapolując te bardzo niewielkie dane można sądzić iż nowa wersja C wejdzie za kilka bądź kilkanaście lat.


"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

Dzięki za odpowiedź. A czy te wersje C89, C99, C11 są kompatybilne wstecz? Czy twórcy C już ustalili z góry, że C nigdy nie doda programowania obiektowego jak C++ i Objective-C w przyszłych nowych standardach? No bo jeśli, nie jest kompatybilne wstecz z poprzednimi standardami, a można by było trochę ulepszyć ten język kopiując do niego bardziej nowoczesne rozwiązania, to czemu nie.

Wibowit
  • Rejestracja:około 20 lat
  • Ostatnio:minuta
0

W życiu pewne są tylko śmierć i podatki. Jednak jest wysoce wątpliwe, by jakakolwiek obiektówka weszła do C. Masz przecież Objective-C, C++, D i Rusta do wyboru. C jest językiem do którego łatwo robić bindingi i to jest jego siła. Wprowadzenie własnej obiektowości spowodowałoby, że integracja z innymi językami (np Javą, Pythonem, C++em) byłaby trudniejsza.

Kompatybilność między wersjami C jest bardzo wysoka, ale możliwe że niepełna. Ewentualne niekompatybilności są spowodowane raczej kwestiami bezpieczeństwa, niż wprowadzaniem nowych bajerów. Oczekiwanie, że C po tylu latach od stworzenia zmieni kierunek rozwoju jest co najmniej absurdalne.


"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.
edytowany 1x, ostatnio: Wibowit
Zobacz pozostałe 16 komentarzy
Wibowit
No to równie dobrze w tym kodzie pod API w C mógłby być klej do wystrzeliwania rakiet w kosmos albo integracja z COBOLem. JVM dalej widziałby tylko kilka metod reprezentujących API w C. Zrobiłeś dodatkowy binding z C do C++, ale z poziomu Javy jest to już nieistotne.
AM
Hmm, nie jestem ekspertem od jni. Ale ten binding to jest cześć procedury jni. Wiec i tak musiałem go zrobić (zakładajac ze nie uzywam JNA gdzie dla c-api zrobił by sie zapewne sam). Natomiast oprócz zrobienia, musze jeszcze dbać w czym była zbudowana libka. I to jest problem o którym mówie od początku. Gdyby libka dawała c-api albo była w C. To bym się nie musiał tym przejmować.
Wibowit
Ciągle porównujesz C vs C++. A bindingi teoretycznie mogą być w różne strony, jak już napisałem: z Javy do Pythona, czy z PHP do C#, czy z JavaScriptu do C++ czy jakikolwiek inny. Jednak w praktyce robi się bindingi tylko do API w C (no chyba, że mówimy o językach frontendowych, wtedy bindingi są do JSa), bo tylko do API w C łatwo zrobić binding. Z drugiej strony w pewnych językach można wystawić API w C, ale to już podchodzi pod tworzenie bindingu i to z ograniczeniami.
Azarien
@Wibowit: Kompatybilność C z C jest pomiędzy wszystkimi kompilatorami na danej platformie. Kompatybilność C++ z C++ można stracić używając różnych wersji tego samego kompilatora, a nawet z powodu różnych flag kompilacji. Upraszczam, ale w przypadku C++ po prostu trzeba wszystko kompilować tym samym, tak samo.
Wibowit
I jeszcze raz mam tłumaczyć, że nawet jakby C++ było kompatybilne z C++ to i tak nikt by wprost bindingów do C++ nie robił? Bindingi są do C, a nie do C++, Javy, Pythona, czy COBOLa.
Burdzi0
  • Rejestracja:około 9 lat
  • Ostatnio:9 dni
  • Lokalizacja:Futurama
  • Postów:887
0

@placeg: A ja spróbuję dojść do sedna, bo sam od czasu do czasu lubię zadać takie pytanie, na które można odpowiedzieć, ale ta odpowiedź tak naprawdę nic nie daje.

Z tonu postu rozumiem, że raczej jesteś początkującym (swój pozna swego :P). Pytanie, które zadałeś jest trochę zbyt ogólne, taki temat rzeka, wiem jednak z czego to wynika - czasami człowiek nawet nie wie o co zapytać. Moja odpowiedzią będzie: języki do pewnego stopnia są do siebie podobne, ale tak jak traktor i jeep. Jedno i drugie ma 4 koła, silnik, żłopie paliwo i jeździ po bezdrożach. Tylko tutaj trzeba zauważyć, że oba narzędzia są używane przy różnych problemach (nie twierdzę, że zawsze, bo są problemy, które rozwiążesz i tu i tu). Java przyjęła się w X, C++ w Y i tyle.

Pytanie brzmi: o co konkretnie chciałeś zapytać? O to który wykorzystuje się w jakich zadaniach? Który łatwiejszy do nauki?


Bite my shiny metal ass!
Life throws you an error code like that, you don't have the luxury of a ZnVja2luZw== pop-up explanation *Robię projekty studenckie, pisz priv ;) *
0

Naucz się Javy i C++ i po problemie.

koszalek-opalek
  • Rejestracja:około 9 lat
  • Ostatnio:ponad 2 lata
1
vpiotr napisał(a):

To ja może trochę o tej Mocy, chociaż wiem że wątek i tak zaraz zejdzie na GC i inne oczywistości.

Ogólnie się zgadzam, ale:

  1. Programming Challenges
    Da się w obu językach. Większość tego typu serwisów wspiera oba te języki. Sam rozwiązuję zadania głównie w Javie.

C++:
[...]

  • programowanie funkcyjne na razie chyba raczkuje (aczkolwiek chętnie usłyszę że nie mam racji)

Proszę bardzo; nie masz racji. :) A poważnie -- co uznasz za nieraczkujące programowanie funkcyjne?

Java:

  • ma więcej wbudowanych kontenerów,

Jakie kontenery ma Java, których nie ma C++? Pytam poważnie, bo nie wiem (Java nie jest moją 'weapon of choice').

[...]

  • typ tablicowy ma rozmiar

W C++ też każdy typ tablicowy ma rozmiar... (tablica.size()). Oczywiście nie mówimy to u surowych tablicach z C (których nie ma sensu używać, jeśli programujesz w C++).

  1. Praktyczność.
    [...]

A tu to już się cąłkiem zgadzam. :)

Zobacz pozostały 1 komentarz
koszalek-opalek
Otóż to. Najgorsze, gdy robią to osoby uczące programowania w C++... :(
grzesiek51114
grzesiek51114
Jeszcze gorsze jest to, że ten właśnie archetyp powielają często nauczyciele akademiccy.
koszalek-opalek
@grzesiek51114: Oj tak tak -- szczerze mówiąc ich (niektórych) miałem głównie na myśli, bo to na nich ciąży największa odpowiedzialność...
jarekr000000
W sumie pisałem dość funkcyjnie w C++ w latach 90 (stl, const referencje), potem lekko BOOST. Ale czułem się baaaardzo samotny w tym stylu.
grzesiek51114
grzesiek51114
Przeżyłem 14 lat temu jednego takiego delikwenta na uczelni. Jego konikiem była klasa CZesp, która wiadomo co reprezentowała. Kiedy się na to patrzyło... [facepalm] A Internetu wtedy tak dostępnego jak dziś jeszcze nie było, żeby móc się szybko naprostować.
vpiotr
  • Rejestracja:ponad 13 lat
  • Ostatnio:prawie 3 lata
1
koszalek-opalek napisał(a):
vpiotr napisał(a):
  • programowanie funkcyjne na razie chyba raczkuje (aczkolwiek chętnie usłyszę że nie mam racji)

Proszę bardzo; nie masz racji. :) A poważnie -- co uznasz za nieraczkujące programowanie funkcyjne?

Np. takie z niemutowalnością kontenerów i lazy evaluation.

Java:

  • ma więcej wbudowanych kontenerów,

Jakie kontenery ma Java, których nie ma C++? Pytam poważnie, bo nie wiem (Java nie jest moją 'weapon of choice').

Jednowątkowe:
LinkedHashMap, LinkedHashSet, EnumMap, EnumSet, WeakHashMap

Wielowątkowe - tego jest dużo więcej, np.:
ArrayBlockingQueue, ConcurrentLinkedQueue, DelayQueue, LinkedBlockingDeque, LinkedBlockingQueue, LinkedTransferQueue, PriorityBlockingQueue, SynchronousQueue

W C++ też każdy typ tablicowy ma rozmiar... (tablica.size()). Oczywiście nie mówimy to u surowych tablicach z C (których nie ma sensu używać, jeśli programujesz w C++).

Oczywiście chodziło mi o typ tablicowy (char[]), nie o tablicę (std::array). Co kto czego używa to inna sprawa.

edytowany 1x, ostatnio: vpiotr

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.