Widzę, że większość aplikacji, które zawierają ciężką treść GUI, jest zwykle rozwijana w C ++. Większość gier / przeglądarek jest napisana w C ++.
Czy nie możemy po prostu opracować lepszych aplikacji GUI z najnowszymi dynamicznymi językami? Wiem, że Java nie byłaby dobrym wyborem. Ale co z takimi językami jak python, które są natywnie zbudowane na C? Czy najnowsze języki nie powinny być lepsze niż ich przodkowie? Dlaczego wciąż wolimy starszą wersję C ++ od najnowszych języków?
Chciałbym również wiedzieć, co jest odpowiedzialne w C ++ za lepszą szybkość przetwarzania GUI? Z drugiej strony, czego brakuje w innych najnowszych językach?
programming-languages
c++
Vamsi Emani
źródło
źródło
Odpowiedzi:
Jestem jedną z osób, które piszą aplikacje GUI C ++ (głównie dla systemu Windows). Dokładnie z Qt. Moje powody:
new
, rzadko kiedydelete
coś wyraźnie, bo używam inteligentnych wskaźników lubQObject
hierarchii.Jak widać, są to głównie osobiste preferencje. Uważam, że ważne jest, aby moja praca była przyjemna, a C ++ mi to zapewnia.
źródło
Ponieważ prędkość ma znaczenie.
Gry używają C ++ do podstawowych zadań, w których ważna jest wydajność. Używają języków dynamicznych do zadań skryptowych, w których ważna jest elastyczność.
Desktopowe aplikacje GUI : na przykład Visual Studio jest napisane w .NET, a nie w natywnym C ++. Wydaje się, że działa całkiem dobrze dla IDE, ponieważ samo IDE nie musi wykonywać wielu zadań wymagających dużej wydajności. (Kompilator, linker i inne narzędzia niekoniecznie są napisane w .NET - choć jak wskazuje wawa w komentarzu, niektóre wydają się być (np. VB.NET))
Przeglądarki też muszą być szybkie. W końcu stanowią one dodatkowy system operacyjny. Z drugiej strony możesz argumentować, że duże części Firefoksa są w rzeczywistości „napisane” w javascript, ponieważ framewor Mozilla wydaje się w dużej mierze zależeć od javascript.
Podsumowując: nie powiedziałbym, że C ++ jest koniecznie preferowany, ale jeśli masz wąskie gardło w wydajności, musisz zbliżyć się do metalu, a następnie spotkać C ++ (cóż, lub C). Czasami łatwiej będzie zrobić wszystko w C ++ - jednym języku.
źródło
Aplikacje GUI, które widzisz napisane w C ++, są generalnie wykonywane z powodów starszych. Python (z Qt lub Gtk) jest bardzo opłacalny dla aplikacji GUI, podobnie jak C #, jeśli pracujesz w domu z systemem Windows. Gdy zaczyna coś nowego, albo jest bardzo dużo wolał C ++ ze względu na brak prac instalacyjnych, które ma być wykonane.
źródło
Ponieważ bez względu na to, ile testów wydajności .NET i podobne tłumy pokazują, bez względu na to, jak blisko są testów wydajności, w końcu aplikacja C ++ wychodzi na wierzch. Jest szybszy przy zimnym rozruchu, jest szybszy i ma więcej sposobów na ulepszenie.
Słyszałem wiele dowodów na początkowych etapach projektu, że .NET jest właściwą drogą, ale kiedy już zostanie wybrany, zawsze kończą się ciężką gratką.
Ponadto C ++ jest obecnie dość bezpieczny i łatwy w użyciu, szczególnie w ramach takich jak Qt lub WTL.
źródło
Większość silników gier jest kodowana w C ++. Również wiele silników przeglądarek jest kodowanych w C ++. Ale GUI przeglądarki jest często kodowane przy użyciu lekkiego skryptu (JavaScript, Python). Z wyjątkiem silnika Source, większość silników gier używa także języków skryptowych (takich jak Lua lub Python). [dla odniesienia: lista skryptowanych gier Lua ]
Weź również popularną bibliotekę GUI C ++, taką jak Qt. W bieżącej wersji (4.7) używa QML dla GUI. QML to w zasadzie JavaScript z powiązaniami Qt.
Więc naprawdę nie ma C ++ w porównaniu z dynamicznymi językami, jest mieszany.
źródło
Pierwszym powodem będzie: (stary) nawyk
Drugi powód: mniejsza niezawodność na maszynach wirtualnych, tłumaczach, które należy zainstalować itp.
I wciąż istnieje kilka doskonałych IDE do opracowania kodu w C ++.
źródło
Powodem jest to, że masz znacznie większą kontrolę nad wszystkim, co się dzieje. Jeśli miałbyś pisać Photoshop w języku C #, miałbyś poważne problemy z wydajnością w przypadku niektórych zadań. W języku niższego poziomu z większą kontrolą możesz wybierać skróty i optymalizować je tam, gdzie jest to potrzebne, w przypadku bardziej intensywnych rzeczy. Oczywiście zakłada to, że używasz C ++ w niezarządzanym kodzie, a nie C ++ w .NET.
Zobacz tutaj szybki przykład.
źródło
C ++ jest typowany statycznie. Pozwala to wcześniej zoptymalizować wykonanie kodu, kompilator dopasowuje swoje abstrakcje do dostępnego procesu systemowego na danej platformie. Do tej pory dynamiczne języki wymagały dodatkowej warstwy oprogramowania (interpretera), która spowalnia dostęp do zasobów systemowych.
źródło
Większość podanych powodów to kwestie techniczne lub „nad stołem” ... oto powody biznesowe lub „pod stołem”:
rozpowszechnianie skompilowanego kodu vs dystrybucja kodu źródłowego. podczas programowania w c / c ++ dystrybuujesz pliki binarne. jeśli rozwijasz się w jednym z nowoczesnych języków, rozpowszechniasz źródło. trudno jest sprzedać pomysł zaciemniaczy kierownictwu, którzy muszą odpowiadać akcjonariuszom / inwestorom, więc nie zawracaj sobie głowy.
głupi użytkownicy: przynajmniej w myślach kierownictwa. nadal widzą, że ich użytkownicy ledwo są w stanie kliknąć dwukrotnie plik „setup.exe”. Jeśli włączysz instalację tłumacza ustnego, potrząsną oni głowami na boki.
dawni programiści: większość ludzi z doświadczeniem istnieje od dawna i nie aktualizuje się. programują w C ++, a nie w nowszych językach, ponieważ nie znają nowych języków.
źródło
Rozszerzyłbym zakres problemu z GUI na oprogramowanie, które ma być konkurencyjne. C ++ nie nakłada podatku na platformę docelową, ponieważ dotyczy mocy obliczeniowej, zainstalowanego środowiska uruchomieniowego, ram itp. Będzie więc działał na bardziej ograniczonym sprzęcie klienta niż podobne rozwiązanie napisane w języku zarządzanym / interpretowanym. W przypadku udanego oprogramowania komercyjnego koszty rozwoju (potencjalnie wyższe w przypadku C ++) są amortyzowane przez liczbę sprzedaży.
Dodatkowo C ++ zwykle oferuje bezpośredni dostęp do apis systemowych (takich jak GUI), co daje najlepszą okazję do optymalizacji wykorzystania i odróżnienia się od podobnych rozwiązań.
źródło
Myślę, że wiele ma to związek z interfejsami API dla zestawów narzędzi GUI. Wszystkie mają API C / C ++, ale nie wszystkie mają (powiedzmy) powiązania Pythona. Czasami same zestawy narzędzi zostały napisane z myślą o C ++, więc nawet jeśli obsługują inne języki, nie obsługują ich w pełni (np. Nie obsługują Pythona
tuple
jako argumentu).źródło
Jako przykłady podajesz przeglądarki i gry. Oba są aplikacjami krytycznymi pod względem wydajności, więc sensowne jest posiadanie ich w języku niskiego poziomu.
Wiele innych aplikacji jest mniej zależnych od wydajności i można je łatwo napisać w innych językach. W szczególności C # wydaje się być często używany. (I Obj-C, ale tak naprawdę nie kwalifikuje się jako wysoki poziom. Chyba lepszy niż C ++.)
Istnieje jednak pewien brak ram dla najnowszych języków programowania. Na przykład tak naprawdę nie ma realnej natywnej biblioteki GUI dla Pythona. Jasne, możesz użyć PyQt lub PyGtk i działają one dobrze, ale ostatecznie jest to tylko interfejs z kodem C. Ponownie C # (i prawdopodobnie Obj-C) wydaje się być wyjątkiem i być może MacRuby lub IronPython mogą zmienić tę grę.
źródło
Aby język zastąpił C ++ lub Javę, musi robić to, czego tak bardzo brakuje w tych językach, oprócz wykonywania ich we własnych siłach. Ponadto na te języki zainwestowano ogromne inwestycje. Oznacza to, że na wielu platformach istnieje standardowa biblioteka C ++, z której łatwo mogą korzystać przeglądarki, gry i takie programy. Więc musi być pewna bezwładność. Języki zdejmują się powoli w przeciwieństwie do innych programów.
Jeśli na to spojrzysz, Anaconda (program instalacyjny RedHata) istnieje od około 10 lat, pisana w Pythonie od samego początku. Python nie był tak popularny, gdy Anaconda była nowa.
Google's Go (golang.org) ewoluuje bardzo szybko. Kompilator nie został jeszcze załadowany. Aby jego popularność mogła wystartować, jego biblioteka musi się ustabilizować, kompilator powinien zostać załadowany i więcej osób musi go używać. Słyszałem, że jeden program produkcyjny poza Google jest napisany w Go i według doniesień nie miał jeszcze przestojów w swoim życiu przez nieco ponad rok.
źródło