Czy C++ desktop upadnie?

Czy C++ desktop upadnie?

Wątek przeniesiony 2020-04-16 11:11 z Edukacja przez cerrato.

BI
  • Rejestracja:ponad 9 lat
  • Ostatnio:około rok
  • Postów:47
0

Witam wszystkich,

Od początku kariery programuję wyłącznie w C++. Kiedy szef poprosił o przepisanie jednego z małych projektów, które zamknąłem wcześniej na C#, postanowiłem spróbować. Nie mogłem się nadziwić jak szybko i bezproblemowo to poszło.

W C++ samo pisanie kodu to połowa roboty. Jazda zaczyna się przy dołączaniu jakichś bibliotek. Cały dzień siedzenia w necie i szukania rozwiązania które będzie dobre dla twojego systemu i kompilatora. Kiedy już znajdziesz odpowiednie rozwiązanie musisz kompilować libki lokalnie. Kilkaset błędów kompilacji za względu na źle ustawione flagi, później kilkaset błędów linkera bo ta biblioteka używa .def, a nie jak w twoim projekcie _dllipmort(). Kiedy już przebrniesz przez cały ten syf i napiszesz swoje 5 linijek kodu okazuje się, że na innym komputerze to nie działa.

w C# + .Net wpisujesz jedno "using" i wszystko działa na wszystkim. Przynajmniej takie moje odczucia, może jakby projekt był większy to więcej problemów bym napotkał, ale korzystałem tam z wielu modułów i zawsze odpalało od pierwszego kopa.

Projektów w których szczególnie zależy klientowi na wydajności jest już mało i wraz z rozwojem sprzętu będzie coraz mniej. Czy programowanie w C++ dla PC, nie traci sensu? Czy może to czas żeby przytomnie przerzucić się na inny język? Czy ktoś z was już podjął podobną decyzję?

edytowany 3x, ostatnio: bilborrd
Miang
czyli w C# używałeś tylko to co jest przygotowane do pracy z tym konkretnym IDE i kompilatorem, w C++ miałeś za dużo możliwości i się pogubiłeś, spróbuj w C++ używać tylko tego co MS poleca
kq
Moderator C/C++
  • Rejestracja:prawie 12 lat
  • Ostatnio:4 dni
  • Lokalizacja:Szczecin
4

Może i upadnie, ale nigdy nie miałem takich doświadczeń z pisaniem w Qt. Wszystko jest bardzo bezproblemowe.

I cały czas tworzę nowe aplikacje w Qt (z widgetami) - idzie to szybko i jestem zadowolony z efektów.


edytowany 1x, ostatnio: kq
AK
  • Rejestracja:prawie 7 lat
  • Ostatnio:około 2 miesiące
  • Postów:3561
0

Desktop w C++ (czy dowolnym języku) nie potrzebuje skrajnych szybkości, i tak nie ma sensu szybciej niż ludzka percepcja.
Algorytmika oczywiście inaczej.

Nawiasem mówiąc kod w GUI jest w bardzo dużym stopniu (jakby) interpretowany, ogromna ilość wszelkiego typu wskaźników funkcyjnych / metod wirtualnych, interpretacja stringów, tablic mapujących we frameworkach itd...


Bo C to najlepszy język, każdy uczeń ci to powie
several
  • Rejestracja:prawie 16 lat
  • Ostatnio:2 minuty
2

Desktop pisany natywnie na pewno nie upadnie, przyrost wydajności sprzętu wyraźnie wyhamowuje i jeśli nie wymyślimy czegoś lepszego od krzemu to z czasem wszyscy programiści będą musieli zacząć oglądać się na wydajność.

Pytanie, czy wtedy C++ będzie najlepszym wyborem? Ciężo powiedzieć.


Zobacz pozostały 1 komentarz
several
No jak nie wyhamowało, dlaczego nie doczekaliśmy się fabrycznego rdzenia, który osiągnąłby powyżej 6GHz taktowania? Dlaczego intel tak długo buja się z 7nm? Jesteśmy na etapie w którym ścieżki w procesorze mają kilka atomów i tych już nie zmniejszysz bo ładunki zaczną randomowo przeskakiwać pomiędzy liniami. Możemy dorzucać rdzeni i zwiększać rozmiary samych chipów, ale takiego skalowania również będzie miało limit.
mr_jaro
@several: no nie wyhamowało bo żeby ominąc ograniczenia poszliśmy w wielordzeniowość. intel buja sie z 14nm i nie może przejść na 10nm a amd leci już na 7nm przy czym tsmc ma już opracowane 5nm i 3nm, powoli zbliża się kolejny przełom czyli wbudowanie ramu w procesor, w zasadzie zastępując cache procesora i ram jedną wspólną pamięcią siedząca w środku
Sunnydev
@mr_jaro: masz jakieś fajne źródło do poczytania o tym wbudowaniu ramu w procek?
several
No właśnie o tym piszę. Możemy poupychać kolejne graty w chipie redukując kolejne podzespoły sprawiając że procek będzie zajmował połowę płyty. Ale limit redukcji został już osiągnięty, jest to te kilka atomów na linie zasilające których już nie zmniejszych. Już teraz zresztą procki są dość zajęte poprawianiem błędów wynikających ze znanych zjawisk fizycznych powstałych w skutek dużego ścisku komponentów. No nie wiem, może jestem zbyt dużym fatalistą.
mr_jaro
@several: nie wiem jak śledzisz doniesienia ale chyba troche słabo na prawdę na razie co chwilą padają kolejne przełomy co do dalszego pomniejszania tranzystorów @Sunnydev ciężko będzie, czytałem o tym jakiś czas temu, a że sporo czytam o takich rzeczach to nie zapisuje sobie linków
KamilAdam
  • Rejestracja:ponad 6 lat
  • Ostatnio:7 dni
  • Lokalizacja:Silesia/Marki
  • Postów:5505
1
bilborrd napisał(a):

W C++ samo pisanie kodu to połowa roboty. Jazda zaczyna się przy dołączaniu jakichś bibliotek.

Myśle że następcą będzie Rust. Podobno manager pakietów Cargo działa tam bardzo dobrze


Mama called me disappointment, Papa called me fat
Każdego eksperta można zastąpić backendowcem który ma się douczyć po godzinach. Tak zostałem ekspertem AI, Neo4j i Nest.js . Przez mianowanie
haael
  • Rejestracja:ponad 6 lat
  • Ostatnio:około 8 godzin
  • Postów:37
0

Wszyscy mają już powoli dość C/C++, ale historia uczy nas, że żadna nowa technologia nie wypchnie starej z jej istniejącej niszy.

Wysoko-wydajne aplikacje na desktopy pisze się w C++ i koniec. Nie zmieni się to, nawet jak powstanie lepsza technologia.

Co innego, jeżeli same desktopy zostaną wyparte przez jakiś nowy paradygmat używania komputerów. To będzie okazja do wymiany technologii.

Jest implementacja microPython, na mikrokontrolery. Można w Pythonie nawet pisać handlery przerwań. Python zajmuje miejsce języka wybitnie niskopoziomowego, jakim był C. Ale wiąże się to z ekspansją RaspberryPi i innych podobnych rzeczy. Python nie wyparł C z istniejących mikrokontrolerów, ale wszedł na nową rozwijającą się działkę. I skoro już się tam zagnieździł, to raczej nic go nie wyprze, nawet jak ktoś wymyśli coś lepszego.

Zobacz pozostałe 4 komentarze
stivens
W sensie chrome i edge?
KR
Nie. Inne rzeczy
stivens
np silnik przeglądarek przepisują z c/c++ na rust bo okazuje się szybszy i wydajnościowo i w kodowaniu. Ja wiem tylko o Mozilli. Co jest malo ciekawe bo to ich jezyk.
KR
To nie jest ich język, w takim samym sensie jak C++ nie jest językiem Microsoftu a Java nie jest Oracle.
stivens
*powstal w ramach ich research labu
PerlMonk
  • Rejestracja:około 6 lat
  • Ostatnio:około 3 lata
  • Lokalizacja:Warszawa 🐪
  • Postów:1719
3

Kolejny wątek na podstawie doświadczenia paru osób. Weźcie pod uwagę to, że C++ używają nie tylko producenci przeglądarek, komunikatorów itp. Mogą być firmy, które używają różnych narzędzi na wewnętrzne potrzeby i się tym nie chwalą - tego nie możemy zweryfikować. Zwróciłem na to uwagę kiedy spotkałem się z taką sytuacją: okienkowa apka w C++ do przetwarzania tekstu robiła całkiem sporo.
Decyzja o każdym projekcie jest indywidualna. Mają na to wpływ różne czynniki, np. czas życia projektu, czas wdrożenia, wydajność, licencja bibliotek i narzędzi. Jeśli programista mówi, że to bez sensu, niech wytłumaczy czemu tak myśli. Nie pamiętam kiedy ostatnio słyszałem, żeby szeregowy programista przekonał biznes, że coś jest bez sensu.


Nie sztuka uciec gdy w dupie sztuciec. 🐪🐪🐪
several
  • Rejestracja:prawie 16 lat
  • Ostatnio:2 minuty
1

Myśle że następcą będzie Rust.

Nie prędko. borrow checker jest jeszcze za głupi i za wolny (EDIT: sprawdź komentarze). Sytuacje w których wiesz, że kod jest bezpieczny a borrow checker raportuje błąd nie są rzadkie. Jak to naprawią to może może.

W tej chwili to wygląda tak, że musisz się nauczyć, jak zadowolić to narzędzie zamiast skupić się na programowaniu, co jest bez sensu bo w tym czasie mógłbyś się nauczyć jak faktycznie obsługiwać pamięć samemu i nie czekać wieczność na kompilację.

@part

Teraz technologie pokroju unity wypychają C++, chociaż cpp zawsze ma bastion w AAA.

Dzięki czemu mamy całe pokolenie wysoko poziomowych game developerów, którzy nie potrafia sami wyświetlić bitmapy w oknie bez pomocy gotowego silnika. Nie podoba mi się ten trend.


edytowany 3x, ostatnio: several
Zobacz pozostałe 3 komentarze
several
W praktyce z C++ kompilacja również nie wygląda różowo, i nawet nie że się nie da, ale mało któremu programiście zależy. Także może nie odczuje nawet dużej różnicy. Aa i sprawdziłem daty w google, stabilny release był 2015 czyli moje grzebanie przypadło na 2016 rok - zapamiętałem fakt, że było to rok po release a nie dokładną datę.
nullpt4
Nie prędko. borrow checker jest jeszcze za głupi i za wolny. Sytuacje w których wiesz, że kod jest bezpieczny a borrow checker raportuje błąd nie są rzadkie. Jak to naprawią to może może. kurde, dobrze że przeczytałem komentarze pod tym postem, bo powielałbym nieaktualne informacje dalej ;/
several
Dodałem edita odsyłającego do komentarzy.
hauleth
Borrow checker jest stosunkowo prosty jak już się ogarnie podstawy. Tylko zaskoczyć o co chodzi jest czasem ciężko. Poza tym to nie borrow checker jest wolny a LLVM i optymalizacje w nim, istnieje plan by debug-buildy robić przy pomocy CraneLift, który potrafi być zdecydowanie szybszy w kompilacji (ale kod wynikowy będzie gorzej zoptymalizowany).
KR
Jeżeli piszesz kod, którego nie rozumie borrow checker, to na 99% ten kod sprawiałby problemy innym programistom, nawet jeśli jest poprawny. Jak ja bym czasem chciał, aby kompilator dał solidnie po łapach programistom, którzy szastają wskaźnikami / referencjami do mutowalnych obiektów po całym kodzie . Później trudno się połapać, co w jakiej kolejności jest modyfikowane. Niestety - muszę się użerać z kodem w Javie.
Wibowit
  • Rejestracja:około 20 lat
  • Ostatnio:około 13 godzin
2

Native desktop cały czas traci na popularności. Zamiast tego wchodzą technologie webowe, bo te są mocno osandboxowane i przez to chętniej wypróbowywane. Prędzej wejdę na przypadkową stronę w Internecie niż zainstaluję przypadkowy program na komputerze. WebAssembly zyskuje na popularności, a niektórzy ludzie mocno się nim jarają, bo ma niby osiągać prędkości bliskie aplikacjom natywnym.


"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
several
Sam fakt budowania czegoś na przeglądarce sprawia, że z założenia nie będzie to tak szybkie jak dobrze skrojona aplikacja natywna. Ciekawe też jak będzie wyglądać kompatybilność biorąc pod uwagę fakt, że przez lata przeglądarki miały niezły rozjazd pomiędzy prymitywnym CSSem czy java scriptem. No nic, na razie interesująca ciekawostka.
PA
  • Rejestracja:ponad 6 lat
  • Ostatnio:około 2 lata
  • Postów:426
0
several napisał(a):

Dzięki czemu mamy całe pokolenie wysoko poziomowych game developerów, którzy nie potrafia sami wyświetlić bitmapy w oknie bez pomocy gotowego silnika. Nie podoba mi się ten trend.

Tak samo można mówić, że mamy webdevów, którzy nie umieją składać ramek tcp. Trend jest taki, żeby biznesowi się podobał.

A co do tematu, to nie widzę jakiś rozsądnych alternatyw do C++ jeżeli chodzi o desktopy. C# jest fajny, ale tylko na windowsa (jeżeli chodzi o desktopowe apki). Java ujdzie ale swing jest stary a javafx martwa.

Ale faktem też jest, że ludzie często piszą jakieś wewnętrzne toole w C++ nawet jeżeli ich firma działa tylko na windowsie. Ihmo ktoś kto chce pisać w C++ sam powinien przedstawić poważne powody "czemu nie wybrać bardziej produktywnej technologi?"

Wibowit
ale swing jest stary a javafx martwa - myślę, że wręcz przeciwnie. Swing zatrzymał się w rozwoju i teraz jest w trybie utrzymywania. JavaFX / OpenJFX jest natomiast rozwijane. Jest coraz lepsze wsparcie dla native-image z GraalVMa (czyli tworzenie natywnych binarek bez JITa), a w planach jest obsługa Androida i iOSa (dzięki tym natywnym binarkom), ale najpierw jest trochę wożenia się ze wsparciem architektury ARM.
PA
Pewnie masz rację, bo nie siedzę jakoś mocno w javie. Kilka lat temu jak wybierałem, w czym pisać projekt javafx nie wydawała się dobrym wyborem. Skoro mówisz, że idzie ku dobremu, to będę bardziej otwarty w przyszłości.
WhiteLightning
  • Rejestracja:prawie 14 lat
  • Ostatnio:około 18 godzin
  • Postów:3187
2

@several: przez analogie, mamy cale pokolenie kierowcow ktorzy nie potrafia zbudowac samemu samochodu...

several
  • Rejestracja:prawie 16 lat
  • Ostatnio:2 minuty
1

@WhiteLightning: To niezbyt trafiona analogia. Ani mechanik, ani kierowca z założenia nie budują samochodów tak jak game developer z założenia powinien umieć zbudować grę. Poprawna analogia wygląda tak: mamy całe pokolenie mechaników, którzy nie potrafią rozłożyć i złożyć z powrotem silnika - i ta sytuacja również mi się nie podoba.

EDIT
Inna sprawa, że ja pisałem o wyświetleniu bitmapy w oknie a nie budowaniu całej gry od zera, ale to już mniejsza.


edytowany 1x, ostatnio: several
Spearhead
  • Rejestracja:prawie 6 lat
  • Ostatnio:około 8 godzin
  • Postów:1002
3

COBOL nie chce umrzeć, a ludzie się pytają, czy C++ przeżyje.

PA
Zdefiniuj umrze. Dla mnie technologia umiera, jeżeli nie powstają w niej nowe projekty.
PerlMonk
Zdefiniuj "nowe projekty". Jeśli mówimy o "nowych projektach" to rycerstwo ma się tak samo dobrze jak czołgi i karabiny maszynowe.
PA
Tak samo jak husaria rzucająca się na czołgi? Raczej nikt normalny nawet nie rozważa, żeby używać COBOL-a, kiedy wybiera technologię do nowo przyklepanego projektu.
PerlMonk
Pisałem o tym, że ludzie piszą w różnych językach dla zabawy albo w celach edukacyjnych. Takim sposobem nowe projekty przynoszą korzyść tylko osobom, które tworzą, a często nikt inny nawet o tym nie wie.
PA
Takim sposobem termin "martwa technologia" nie ma żadnego sensu. Ktoś może dla zabawy zbudować sobie lisp-maszyne i już technologia będzie żywa. Mówię tutaj o rynku komercyjnym, ewentualnie skomercjalizowanym open source.
Wibowit
  • Rejestracja:około 20 lat
  • Ostatnio:około 13 godzin
4

No to trzeba zmienić pytanie na inne: czy C++ podzieli los COBOLa?


"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.
PerlMonk
Nie mów nikomu jak ma żyć.
hauleth
Moderator
  • Rejestracja:ponad 17 lat
  • Ostatnio:6 dni
1

No to trzeba zmienić pytanie na inne: czy C++ podzieli los COBOLa?

Jak na moje, to powoli tak. Wolniej niż COBOL, bo tego drugiego programiści zwyczajnie nie chcieli i był robiony przez biznes, ale stopniowo tak. C się utrzyma zdecydowanie dłużej i lepiej, ale w C++ powoli będzie powstawało coraz mniej nowego softu na rzecz innych języków programowania - Rust, Zig, Swift, C#, Go, Kotlin. Te języki zapewnią większą szybkość niż web, ale będą znacznie bardziej przyjazne programiście.


Zobacz pozostałe 3 komentarze
hauleth
Zig ma zaletę, że zdecydowanie lepiej się integruje z C przez co może zacząć zgarniać popularność szybciej. Więcej - Zig może być użyty jako kompilator C (LLVM jest pod spodem).
KamilAdam
Rust tez ma LLVM pod spodem. I Pony. I Crystal. I Haskell. Z nowych języków chyba tylko Go ma całkowicie napisany od podstaw kompilator
hauleth
Tak, ale mi chodziło, że w przeciwieństwie do wymienionych to Zig jeszcze zawiera w sobie pełen FE dla C, i to jest dość sporym wyróżnieniem.
KR
Zig nie jest memory safe, więc trochę nie widzę sensu go używać ponad C. Dla ładniejszej składni?
hauleth
Nie jest w 100% memory safe jak Rust, ale i tak oferuje bardzo dużo nad standardowe C- https://ziglang.org/documentation/master/#Undefined-Behavior
vpiotr
  • Rejestracja:prawie 14 lat
  • Ostatnio:prawie 3 lata
0

To w Rust mozna pisac obiektowo, generycznie i robic obliczenia w czasie kompilacji?

Wg mnie desktop moglby byc robiony w dowolnym jezyku jesli bedzie zapewniona infrastruktura. Komponenty wizualne, narzedzia - budowanie, pakowanie, testowanie.

C# mialby duze szanse zastapic C++ na desktopie gdyby nie mial wadliwego (w oczach spolecznosci OSS) pochodzenia. Wg mojej wrozki skonczy jako kolejny COBOL czy Visual Basic - z mocnym poparciem biznesu, ale coraz mniejszym zaangazowaniem programistow.

Na desktopie wewnetrzne korporacyjne toole calkiem spoko robi sie w Javie SE + Swing + Netbeans.
Nie wyglada to rewelacyjnie, ale jest za darmo i zawsze sie ktos znajdzie kto to zna.

WeiXiao
Wg mojej wrozki skonczy jako kolejny COBOL czy Visual Basic - z mocnym poparciem biznesu, ale coraz mniejszym zaangazowaniem programistow. czemu miałby?
vpiotr
A czemu nie?
WeiXiao
nie twierdzę że nie, bo może wyjść jakiś C#++ i zastąpić, ale po prostu patrząc na aktualny trend zastanawiam się czemu miałoby się tak stać. Może braki w działce AI/ML i chyba średnie wsparcie dla mobilki?
vpiotr
C# to jezyk uniwersalny. IMHO takie jezyki niedlugo przestana miec racje bytu, stajac sie kobylami nie do ogarniecia. Przyszloscia sa jezyki DSLo podobne, wymyslone na kolanie do jednego celu, wsparte przez jakis wyczesany engine w rodzaju LLVM
hauleth
Moderator
  • Rejestracja:ponad 17 lat
  • Ostatnio:6 dni
4

To w Rust mozna pisac obiektowo, generycznie i robic obliczenia w czasie kompilacji?

3x tak.

C# mialby duze szanse zastapic C++ na desktopie gdyby nie mial wadliwego (w oczach spolecznosci OSS) pochodzenia.

Większym problemem był brak oficjalnego wsparcia na innych platformach niż MS. Obecnie z Core się to trochę zmienia i zobaczymy jak wyjdzie, ale nie sądzę by się mocno przebiło na innych platformach, ale kto wie. Może GNOME zainwestuje w to czas zamiast Vale.


Wibowit
Zmienia się? ZTCP to Core nie wspiera GUI na Linuksie i nie ma tego w planach nawet.
Ktos
Tak i nie - niby jest Xamarin.Forms dla GTK#, ale jakoś go nie widać na horyzoncie, no i są 3rd party w rodzaju Avalonia.
Wibowit
Jak dużą to ma popularność w sferze GUI do C#? W sensie jaki % aplikacji jest pisanych pod GUI wbudowane w Core (WinForms, WPF), a jaki % używa innych (te Xamarin.Forms, Avalonia, itd)? Mogłem pomieszać nazwy, bo się nie znam.
Ktos
Na razie to prawdopodobnie absolutnie żadną popularność ;) Jak już GUI i C# to raczej nikt się nie bawił dotychczas w inne platformy niż Windows.
KamilAdam
  • Rejestracja:ponad 6 lat
  • Ostatnio:7 dni
  • Lokalizacja:Silesia/Marki
  • Postów:5505
0
vpiotr napisał(a):

To w Rust mozna pisac obiektowo, generycznie i robic obliczenia w czasie kompilacji?

W Ruscie istnieją oczywiscie generyki (Typy parametryczne) oraz jest mozliwy polimorfizm za pomocą Traitów. Ale nie jest to klasyczne OOP. Podobno przypomina Type Classy z Haskella. Nie rozumiem co masz ma myśli pisząc obliczenia w czasie kompilacji


Mama called me disappointment, Papa called me fat
Każdego eksperta można zastąpić backendowcem który ma się douczyć po godzinach. Tak zostałem ekspertem AI, Neo4j i Nest.js . Przez mianowanie
edytowany 1x, ostatnio: KamilAdam
Zobacz pozostały 1 komentarz
kq
Obliczenia (a raczej wykonanie kodu) w czasie kompilacji to dokładnie to. W D (i w C++ trochę też) możesz wiele rzeczy wymusić (bez zdawania się na łaskę kompilatora) aby były wykonane w czasie kompilacji. https://tour.dlang.org/tour/en/gems/compile-time-function-evaluation-ctfe
KamilAdam
@Wibowit: wiem, ale sami twórcy Rusta nie są pewni czy Rust jest obiektowy bo nie pozwala na dziedziczenie pól. Z drugiej strony dziedziczenie pól prowadzi do niesamowitych patologii w OOP. Więc dla mnie jest to poprawione OOP
Wibowit
Rust nie jest zorientowany obiektowo, ale obiektowo pisać się da. Obiektowo pisać się da nawet w C ( https://en.wikipedia.org/wiki/GObject ), ale tam to jest jeszcze bardziej upierdliwe niż w Ruście. Analogicznie do pytania o umieranie języka: nie powinno się pytać czy w języku X da się pisać obiektowo tylko czy język X jest zorientowany obiektowo.
KR
Rust ma coś znacznie mocniejszego: makra.
somedev
  • Rejestracja:prawie 7 lat
  • Ostatnio:prawie 5 lat
  • Postów:666
0

Są aplikacje tzw. havy duty - gdzie dosłownie milisekundy mają znaczenie. Chodzi o np. panie pracujące z fakturami. One dochodzą do takiej wprawy, że dosłownie w mgnieniu oka otwierają i zamykają okna. Aplikacje sa budowane z dziesiątkami paneli i zakładek. Wiem, że zaraz odezwie się ktoś od UI, ale tak jest i takie aplikacje są i są potrzebne. Dla nich na razie zostaje tylko C++ - wszystko inne jest jeszcze bardziej niedopracowane (no, jeszcze Delphi jest, ale VCL, to też nie jest demon prędkości, szczególnie jak dynamicznie budujemy formy... fmx nie znam). Może Rust dorobi się czegoś takiego jak QT i będzie mógł zastąpić C++, ale to jeszcze nie teraz, na pewno nie zmigruje się aplikacjami które są napisane już w C++, a devovie tych apek będą kolejne raczej też w C++ robić. Aha, żadna aplikacja webowa nie ma startu do wyspecjalizowanych, wysokowydajnych aplikacji natywnych.

Patryk27
Moderator
  • Rejestracja:prawie 18 lat
  • Ostatnio:prawie 2 lata
  • Lokalizacja:Wrocław
  • Postów:13042
1

To w Rust mozna pisac obiektowo [...]?

Czy w dowolnym obecnie popularnym języku można pisać obiektowo? :-P

http://loup-vaillant.fr/articles/deaths-of-oop


edytowany 1x, ostatnio: Patryk27
KamilAdam
  • Rejestracja:ponad 6 lat
  • Ostatnio:7 dni
  • Lokalizacja:Silesia/Marki
  • Postów:5505
1
Patryk27 napisał(a):

To w Rust mozna pisac obiektowo [...]?

Czy w dowolnym obecnie popularnym języku można pisać obiektowo? :-P

http://loup-vaillant.fr/articles/deaths-of-oop

Bojownicy SmallTalka i ich alternatywne definicje :D
Chociaż prawda jest że większość programistow których spotkałem gdy mowi obiektowość ma na myśli polimorfizm działający w czasie wykonania czyli zwykle subtyping lub duck typing w ostatecznosci statyczny duck typing czyli structured typing jak w Typescripcie lub Go


Mama called me disappointment, Papa called me fat
Każdego eksperta można zastąpić backendowcem który ma się douczyć po godzinach. Tak zostałem ekspertem AI, Neo4j i Nest.js . Przez mianowanie
edytowany 1x, ostatnio: KamilAdam
PA
Ja mam na myśli message passing
hauleth
@part: też się da, i to całkiem łatwo.
PA
Nawet w C można napisać całkiem fajne obiektowe api - QNX jest najlepszym przykładem.
Wibowit
  • Rejestracja:około 20 lat
  • Ostatnio:około 13 godzin
2
vpiotr napisał(a):

To w Rust mozna pisac obiektowo, generycznie i robic obliczenia w czasie kompilacji?

Teraz to nawet w Javie się da :] native-image z GraalVMa potrafi wiele statycznego kodu wykonać w czasie kompilacji i taki już obliczony wynik wrzucić do EXEka, przez co czas startu aplikacji się skraca.


"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 4 komentarze
Wibowit
Qt ma kilka kilobajtów? To jakiś left-pad?
vpiotr
Jakby mialo to java bylaby bez szans.
Wibowit
Przecież byle biblioteki JSowe mają setki kilobajtów i ludzie z czegoś takiego na komórkach korzystają. Czemu zejście do kilku kilobajtów miałoby o czymś decydować?
vpiotr
Ale java przeciez przede wszystkim odstaje obecnie wygladem, wiec po co ja rozwazac? Biblioteki JSowe powstaja po kilka na tydzien, wyglad Swinga nie zmienil sie od pewnie nastu lat.
Wibowit
IntelliJ IDEA jest oparte o Swinga, a moim zdaniem wcale nie trąci myszką. Całkiem zgrabne IDE. Oczywiście to kwestia gustu. A OpenJFX to wcale nie jest martwa technologia. Nowe wersje wychodzą regularnie. Zresztą co ma wygląd do kilobajtów?
PL
  • Rejestracja:ponad 7 lat
  • Ostatnio:ponad 2 lata
  • Postów:104
0

WPF to nie jest to samo co WindowsForms. W WPF każdy element okna rysowany jest przez bibliotekę DIRECTX przy użyciu procesora graficznego. W trakcie wykonania programu kod C#->IL kompiluje się do kodu natywnego.

PerlMonk
Dobrze już, cicho :P . Ci dotnetowcy wszędzie muszą bronić technologii M$. Jakby już nie mogła sama... :D
Wibowit
Javowy dziadek Swing też używa Direct3D na Windowsie.
somedev
  • Rejestracja:prawie 7 lat
  • Ostatnio:prawie 5 lat
  • Postów:666
1

@ple właśnie dlatego, WPF jest wolniejszy nieco od WF bo jest bardziej skomplikowany. Jakby jeszcze WPF był multiplatformowy to spoko.... ale jest tylko na Windows a traci zalety Windowsa - m.in. to, że wszystko jest oknem, bo tam Handler jest tylko na okno i ew. okno modalne komunikatu.

GS
  • Rejestracja:prawie 9 lat
  • Ostatnio:dzień
  • Postów:1265
2

Na desktopy, w sensie typowej aplikacji używanej przez użytkownika, to C++ może i upadnie, ale jeśli chodzi o biblioteki i aplikacje serwerowe, to zapotrzebowanie może jeszcze wzrosnąć. Odkąd komputeryzacja weszła w taką fazę, że przetwarzanie dużych ilości danych (od setek GB w górę) zaczęło być wykonywalne, to otworzyła się droga dla nowych zastosowań obliczeniowych związanych z uczeniem maszynowym, symulacjami, czy przetwarzaniem chmur punktów. I tu znowu potrzeba szybkości. I nawet jeśli istnieją języki równie szybkie co C++, to C++ ma przewagę dobrze rozwiniętych narzędzi, które wspierają te zastosowania, np. OpenCV do przetwarzania zdjęć i video czy Ceres do optymalizacji nieliniowej. C++ jest też dobrym językiem do współpracy z GPU dzięki CUDA, albo tensorRT, co powoduje, że jeśli mam naprawdę ogromne ilości danych do przetworzenia, które można zrównoleglić, to wciąż najszybciej zrobię to narzędziami napisanymi w C++.

hauleth
OpenCV jest napisany w C, więc może współpracować z każdym językiem, który wspiera FFI. CUDA czy tensorRT też nie są w żadnym stopniu uwiązane do C++ i równie dobrze można używać ich w Ruscie czy Zigu.
GS
Fajnie to wygląda w teorii, ale w praktyce potrzeba bindingów między daną biblioteką a innym językiem, a te w przypadku np. Rusta bywają ubogie, przestarzałe względem aktualnych wersji, słabo utrzymywane i rozwijane. Sam fakt użycia warstwy pośredniej może być źródłem potencjalnych problemów. Wreszcie, nie najlepiej korzysta się z dokumentacji opartej na jednym języku, gdy korzysta się z innego, w przypadku problemów, trudno znaleźć właściwą przyczynę. Dlatego w CUDA wolę trzymać się C++.
hauleth
C++ i C też mają sporo różnic, to nie jest tak, że absolutnie bez problemowo można je integrować.
Wibowit
  • Rejestracja:około 20 lat
  • Ostatnio:około 13 godzin
1

Jest jeszcze FORTRAN, np cuda-fortran: https://developer.nvidia.com/cuda-fortran Pewnie jeszcze szybsze niż C i C++ :]


"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.
GS
No dobrze, ale te dane do przeliczenia na GPU trzeba jeszcze jakoś uzyskać i sprowadzić do właściwej dla danego problemu postaci. Często są to dane wizualne, pochodzące ze zdjęć, a nie wiem jak stoi OpenCV czy analogiczna biblioteka, na Fortranie. Dlatego mimo wszystko wybrałbym C++, jako dość uniwersalne narzędzie z szerszym wsparciem bibliotek.
vpiotr
Moze niekoniecznie szybsze tylko nie tak bolesne przy pracy z wielowymiarowymi (2+) tablicami jak C/C++.
BI
  • Rejestracja:ponad 9 lat
  • Ostatnio:około rok
  • Postów:47
0

Niezłą dyskusję wywołałem :) widzę, że przewija się czasem twierdzenie, że są języki szybsze niż C/C++. Nie do końca rozumiem to stwierdzenie. Są to języki kompilowane do kodu maszynowego nie może być szybszych języków. Oczywiście, dużo zależy od umiejętności programisty ale teoretycznie, skoro nie mamy żadnej warstwy abstrakcji, mamy maksymalne możliwości optymalizacji i inne języki mogą być tylko równie szybkie. Może się mylę?

Chyba, że chodzi wam o to, że pewne domyślne rozwiązania jak np. polimorfizm, są lepiej zrealizowane w innych.

edytowany 2x, ostatnio: bilborrd
hauleth
Moderator
  • Rejestracja:ponad 17 lat
  • Ostatnio:6 dni
3
bilborrd napisał(a):

Nie do końca rozumiem to stwierdzenie. Są to języki kompilowane do kodu maszynowego nie może być szybszych języków. Oczywiście, dużo zależy od umiejętności programisty ale teoretycznie, skoro nie mamy żadnej warstwy abstrakcji, mamy maksymalne możliwości optymalizacji i inne języki mogą być tylko równie szybkie. Może się mylę?

Czasami ze względu na konstrukcję języków może się okazać, że niektóre rzeczy kompilator może założyć, że są spełnione. Przykładowo jeśli kod jest w safe Rust to możesz założyć, że przekazane referencje nie będą się na siebie nakładały (aliasing). Przez co kompilator może poczynić pewne założenia i zoptymalizować kod odpowiednio. Dodatkowo czasem konstrukcje w języku pozwalają Ci łatwiej zapanować nad niektórymi konstrukcjami, np. napisanie Servo w Ruście, a zwłaszcza równoległego renderingu, było łatwiejsze niż w C/C++, bo borrow checker i ownership pozwalał na łatwiejsze ogarnięcie kto może w danym momencie gdzie pisać, co redukuje miejsca gdzie potrzebujesz kontroli sekcji krytycznej "na wszelki wypadek". Całe mnóstwo małych rzeczy składa się na to, że często zarówno programiście jest łatwiej przedstawić niektóre koncepty jak i kompilator może mieć więcej informacji nt. samego kodu, co może pozwolić na lepsze optymalizacje.

Ostatnią rzeczą jest to, że języki bez "naleciałości historycznej" mogą być "naturalniejsze". Przykładowo funkcję z Rusta:

Kopiuj
fn gen_arr_4(n: usize) -> [usize; 4] {
    [n, n + 1, n + 2, n + 3]
}

W C++ trzeba zapisać przy pomocy "mniej naturalnego" (a i tak nie wiem czy to jest poprawny zapis):

Kopiuj
std::array<int, 4> gen_arr_4(int n) {
	return {n, n + 1, n + 2, n + 3};
}

Dodatkowo nawet mając większość "zabezpieczeń i bajerów" z nowych wersji C++ to nie zawsze stary kod będzie ich używał z różnych powodów (np. bo jest stary i nikt nie miał czasu ani chęci go przepisać lub musi wspierać również starsze kompilatory).


edytowany 1x, ostatnio: hauleth
Zobacz pozostały 1 komentarz
hauleth
@Sunnydev: chodzi o to, że "bardziej naturalnym" sposobem zwracania tablicy w C++ byłoby https://ideone.com/Efl8SF ale to nie ma sensu w tym języku.
Azarien
nie wiem co tu jest naturalniejsze w tym przykładzie z Rustem - składnia jest mi obca i za bardzo tej rzekomo "naturalniejszej" nie rozumiem.
hauleth
@Azarien: chodzi o to, że w C++ musisz uciekać się do typu z biblioteki standardowej gdzie w Ruscie zwracasz typ podstawowy. Nie trzeba używać jakichś wrapperów.
Azarien
biblioteka standardowa jest częścią standardu języka więc nie traktowałbym tego jako czegoś gorszego od "typu podstawowego". gramatyka C++ jest tak rozbudowana, że to co w innych językach musiałoby być "magiczne" (wbudowane) tu da się po prostu zakodzić.
hauleth
Tylko, że to działa tylko jako typ, nie da się zwrócić danych bez niego, bo int foo(int)[4] nie zadziała jeśli zwracasz tablicę nie statyczną. Wszystko jest związane z tym, że C++ domyślnie kopiuje i czasem może być optymalizacja z przenoszeniem. Rust domyślnie przenosi i tylko niektóre typy mogą być kopiowane.
Wibowit
  • Rejestracja:około 20 lat
  • Ostatnio:około 13 godzin
2
bilborrd napisał(a):

Niezłą dyskusję wywołałem :) widzę, że przewija się czasem twierdzenie, że są języki szybsze niż C/C++. Nie do końca rozumiem to stwierdzenie. Są to języki kompilowane do kodu maszynowego nie może być szybszych języków. Oczywiście, dużo zależy od umiejętności programisty ale teoretycznie, skoro nie mamy żadnej warstwy abstrakcji, mamy maksymalne możliwości optymalizacji i inne języki mogą być tylko równie szybkie. Może się mylę?

Chyba, że chodzi wam o to, że pewne domyślne rozwiązania jak np. polimorfizm, są lepiej zrealizowane w innych.

Golang jest kompilowany do kodu natywnego, a w np w tym benchmarku wypada dość niekorzystnie względem C++: https://benchmarksgame-team.pages.debian.net/benchmarksgame/fastest/go-gpp.html

Javę do kodu natywnego można było kompilować już od dawna. Kiedyś było GCJ (GNU Compiler for Java), ale to nigdy nie działało dobrze. Przez długi czas (aż do niedawna) był Excelsior JET, ale firma zamknęła biznes, prawdopodobnie z powodu konkurencji ze strony native-image z GraalVMa.


"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.
TurkucPodjadek
TurkucPodjadek
W Go masz dosyć zaawansowany runtime, jakby się uprzeć to prawie jak taka mini vmka (w porównaniu do JVMa)
Wibowit
Ale dalej jest kompilacja AOT do kodu natywnego. Obecność tracing GC czy green (?) threads tego nie zmienia. Scala Native wykorzystuje Boehm GC / Immix GC oraz ma event loopa zamiast prawdziwych wątków (prawdziwych jeszcze nie zaimplementowali). Czy przez to jest mniej native? Da się ręcznie zarządzać pamięcią jak ktoś chce, ale to wymaga trochę ceremonii w porównaniu do trybu domyślnego.
TurkucPodjadek
TurkucPodjadek
Z AOT to prawda, tylko porównaj kod np. programu w C/C++, do tego w Go. W Go nie możesz sobie "zrezygnować" z runtime, jak w przypadku C/C++, gdzie możesz zrobić jakieś optymalizacje zależne od architektury i kompilatora, więc to taka "hybryda" bardziej (z wszystkimi zaletami i wadami)
RE
  • Rejestracja:ponad 18 lat
  • Ostatnio:około 5 godzin
0

trochę klepałem ostatnio w ML, opencv i pythonie ostatnio trochę hobby trochę komercyjny produkt. Wszystko naklepałem w python(gui w qt, przetwarzanie w opencv + imageai/keras). I powiem wam że jak bym miał to jeszcze raz pisać wziąłbym C++ na gui, ogarnianie ustawień, obsługa bazy sql itp. a jako proces odpalałbym skrypt pythonowy który ma jeden wątek i tylko mieli dane z kamery, przerzuca do opencv i ml a po IPC zwraca wynik. Niech mówią co chcą o C++ ma swoje wady ale osobiście wolałbym taką architekturę. C++ aczkolwiek C# + Keras kusi. Muszę obadać czy na jetson hula. Podsumowując wywód C++ na pewno utrzyma się na jakiś komputerach przemysłowych czy innym "ebmedded". I myślę na linuxowym desktop, tu jednak sporo się w C/C++ klepie nadal.


We are the 4p. Existence, as you know it, is over. We will add your biological and technological distinctiveness to our own. Resistance is futile
PA
No bo wybrałeś chyba najgorszy język do GUI. W Pythonie możesz ewentualnie zrobić aplikację webową działającą tylko na localhoście.
RE
gui sobie wygenerowałem z qtdesignera i pyuic przeniosłem do python. Generalnie wcześniej w python pisałem bez gui, a zamysł był prosty, w miarę proste gui z paroma featuerami(opcjonalnie zapis do sqlite) a reszta to czyste opencv + ml. Zawodowo piszę w C++ więc wtedy wydawało się to dobrym pomysłem ale nigdy więcej ;) Kiedyś jak testowałem Ms face recognition to zrobiłem to tak jak mówisz. Frontend w php gdzieśw necie a na azure backend w C# odbierający i wysyłający dane czyli dość klasycznie. Tak czy siach widzę potencjał w C++ na desktop przynajmniej na linuksowym.

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.