Programowanie na wiele platform: C ++ vs. Python [zamknięte]

11

Dobra, na początek mam doświadczenie jako programista Obj-C / Cocoa i Ruby w / Rails. Są świetne, ale nie są tak naprawdę pomocne w pisaniu aplikacji wieloplatformowych (mam nadzieję, że GNUStep kiedyś będzie wystarczająco kompletny, aby pierwsza była wieloplatformowa, ale ten dzień nie jest dzisiaj).

C ++, z tego co mogę zebrać, jest niezwykle potężny, ale także ogromny, brzydki behemot, którego opanowanie może zająć pół dekady lub więcej. Przeczytałem również, że bardzo łatwo możesz nie tylko strzelić sobie w stopę, ale także zdmuchnąć nią całą nogę, ponieważ zarządzanie pamięcią odbywa się ręcznie. Oczywiście wszystko to jest dość przerażające. Czy to jest poprawne?

Python wydaje się zapewniać większość mocy C ++ i jest znacznie łatwiejszy do zdobycia kosztem szybkości. Jak duża jest ta ofiara? Czy to ma sens, czy można je zignorować?

Co sprawi, że będę pisać szybkie, stabilne i niezawodne aplikacje w rozsądnym czasie?

Ponadto, czy lepiej jest używać Qt dla interfejsu użytkownika, czy zamiast tego utrzymywać osobne, natywne interfejsy dla każdej platformy?

EDYCJA: Dla większej przejrzystości, są dwa typy aplikacji, które chcę napisać: jeden jest niezwykle przyjaznym i wygodnym frontendem do bazy danych, a drugi, który bez wątpienia pojawi się znacznie później, to edytor światów 3D.

John Wells
źródło
Zadajesz pytania, na które odpowiedzi będą wysoce subiektywne - IMHO nie jest konstruktywne, więc głosujesz za zamknięciem. Zadajesz również co najmniej 4 różne pytania w jednym. Jak może ktoś inny, ale ty wiesz, czy C ++ lub Python jest lepszym wyborem dla Ciebie ? Sugeruję, abyś spróbował zbudować małą aplikację GUI za pomocą Pythona (która powinna zająć ci nie więcej niż jeden dzień) i tę samą aplikację w C ++ i porównać ją samodzielnie.
Doc Brown
Myślę, że to, o co naprawdę staram się zapytać, ma to, czego szukam, co jest obiektywnie lepszym wyborem?
John Wells,
Czy możesz podać dodatkowy kontekst - co musi zrobić Twoja aplikacja komputerowa? Dużo matematyki? Aplikacja zwiększająca wydajność? Dostęp do bazy danych? Gra?
JBRWilkinson
Dodano edycję, aby wyjaśnić, co chcę zrobić.
John Wells,
Zdecydowałbym się na użycie tego samego języka systemu operacyjnego i / lub biblioteki GUI. Możesz łatwiej wykonywać bardziej szczegółowe operacje na interfejsie użytkownika. Spróbuj przeprowadzić symulację czegoś tak prostego jak pełny ekran (naciśnij F11 w przeglądarce) w języku wysokiego poziomu, takim jak Java lub C #. Opieram swoją sprawę. Rozwiązania natywne można przenosić na szerszą gamę urządzeń niż rozwiązania wysokiego poziomu, takie jak Java (jak na ironię).
Lord Tydus,

Odpowiedzi:

9

C / C ++ jest szybki. Rzeczywistość jest taka, że ​​większość aplikacji nie potrzebuje takiej wydajności w stanie obecnego oprogramowania sprzętowego. Zwykle jest to aplikacja napisana w języku wysokiego poziomu, takim jak Python, a następnie zoptymalizowana w razie potrzeby za pomocą języków niższego poziomu, takich jak C / C ++.

Python da ci duży wzrost wydajności, jest łatwy do nauczenia się i dość szybki. Istnieje Cython , którego można używać do pisania rozszerzeń C do użycia w aplikacji Python ze składnią podobną do Pythona, aby przyspieszyć wąskie gardła.

W przypadku standardowych aplikacji GUI Python może zapewnić wystarczającą wydajność. A Python ma coś bardzo fajnego o nazwie Kivy , framework GUI, który działa na komputerach Mac, Windows, Linux, Android i iOS i obsługuje funkcję multi-touch. Dodatkową częścią jest to, że części krytyczne pod względem wydajności są zoptymalizowane za pomocą C, używając Cython.

Hakan Deryal
źródło
1
Prawdopodobnie masz rację co do prędkości. Kivy wydaje się bardzo zdolny, ale czy potrafi rysować natywne dla systemu widżety?
John Wells,
Nie, używa własnego silnika graficznego dla widżetów, używając OpenGL ES. Qt będzie prawdopodobnie najlepszym wyborem dla natywnych widżetów międzyplatformowych.
Hakan Deryal,
5

Wybrałbym Python, ponieważ daje to duży wzrost wydajności. Nadal możesz pisać części aplikacji, które wymagają szybkości w C ++, istnieje projekt Cython , który pozwala na korzystanie z bibliotek C ++ bezpośrednio w Pythonie. Jeśli obawiasz się o bezpieczeństwo swoich źródeł, Cython może również w tym pomóc, możesz go użyć do skompilowania normalnego kodu Pythona do kodu C ++.

Polecam osadzić silnik Chrome i korzystać z technologii takich jak: HTML5 + CSS3 + JavaScript + JQuery + Canvas dla interfejsu użytkownika.

Istnieje platforma, która ułatwia osadzenie silnika Chrome w aplikacji C ++, nazywa się CEF - Chromium Embedded Framework . Obsługuje Windows, Linux, Mac OS.

Jeśli podoba Ci się Python, spójrz na CEF Python , to projekt, który zapewnia powiązania Pythona dla frameworka CEF (za pomocą Cython ). Python CEF obsługuje obecnie tylko system Windows, ale istnieją plany dotyczące innych systemów operacyjnych.

Oto lista aplikacji, które odniosły sukces przy użyciu CEF ( stąd ):

  • Adobe Brackets - edytor kodu dla Internetu
  • Adobe Edge - narzędzie do tworzenia multimediów
  • AppJS - buduj aplikacje komputerowe za pomocą Node.js
  • AOL Instant Messenger - klient Windows używa CEF
  • Cubiez - integruje twoją ulubioną zawartość z komputerem
  • Desura - platforma do gier online
  • Dish World IPTV - platforma przesyłania strumieniowego wideo
  • Evernote - oprogramowanie do tworzenia notatek
  • ExeOutput - pozwala wdrażać aplikacje HTML5 / PHP jako aplikacje komputerowe
  • GitHub dla Windows - oprogramowanie klienckie GitHub dla Windows
  • Janetter - oprogramowanie klienckie Twitter
  • mChef - wtyczka przeglądarki mIRC
  • MediaMan - oprogramowanie organizatora
  • MetaVR - oprogramowanie do symulacji geograficznej
  • MTG Studio - oprogramowanie do organizowania gier
  • OpenSpace3D - platforma programistyczna 3D
  • Rdio - platforma do przesyłania strumieniowego muzyki
  • Spotify - platforma do przesyłania strumieniowego muzyki
  • Klient Steam - platforma do gier online
  • Tencent QQ - komunikator i przeglądarka internetowa
  • Trend Micro - oprogramowanie zabezpieczające internet
  • WBEA Desktop - pozwala wdrażać aplikacje HTML5 jako aplikacje komputerowe

Zobacz także ten wpis na blogu: Budowanie aplikacji o jakości pulpitu w technologiach internetowych - zespół redaktorów nawiasów wyjaśniający, w jaki sposób zbudowali ją przy użyciu środowiska CEF i technologii internetowych, takich jak: jQuery , Bootstrap , LESS CSS , wymagają JS , Jasmine do testowania jednostek , JSlint .

Oświadczenie: Jestem autorem projektu CEF Python.

Czarek Tomczak
źródło
Dzięki za wkład! CEF wygląda całkiem ładnie, ale mam nadzieję zapewnić natywną obsługę na każdej platformie, jeśli to w ogóle możliwe, co jest trudne do odtworzenia za pomocą HTML, CSS i JS.
John Wells,
@JohnWells, dlaczego natywny? Ludzie są przyzwyczajeni do korzystania z Internetu. Spójrz na Windows 8, każdy kolejny system operacyjny firmy Microsoft ma mniej wspólnego z natywnym, wymuszają technologie sieciowe i to jest przyszłość, nie ma czegoś takiego jak „natywne doświadczenie”, to już przeszłość.
Czarek Tomczak
To zależy od oprogramowania, o którym mówisz. Aplikacje zorientowane na konsumenta mogą działać w stylu „sieciowym”, ale nie jest tak dobrze w przypadku oprogramowania skoncentrowanego na tworzeniu treści. Ponadto, chociaż Windows 8 może być ukierunkowany na technologię internetową, Mac OS jest nadal mocno osadzony w ojczystym kraju, a jego użytkownicy nie lubią oprogramowania, które odbiega od tego.
John Wells,
1
Całkiem słusznie JBRWilkinson, ale tak naprawdę nie chcę pisać CSS naśladujących widżety (w przypadku CEF) dla każdej platformy, jeśli nie muszę.
John Wells,
1
Będąc użytkownikiem komputera Mac, natywna obsługa ma dla mnie duże znaczenie. Moim zdaniem nie ma nic gorszego niż aplikacja, która nie pojawia się i działa zgodnie z systemem operacyjnym, na którym działa. Nawet coś w rodzaju ogromnego wzrostu wydajności nie wystarczy, aby to przeważyć.
John Wells,
5

Sposób Qt w C ++ jest świetny i czysty, więc proszę, porzuć część „brzydkiego behemota”, wypróbowałem je obie i osobiście jestem o wiele bardziej produktywny / wygodny z Qt / C ++ niż z wiązaniem Qt Pythona. To moja rada, jeśli zdecydujesz się na Qt. Oprócz natywnego doświadczenia zapewnianego przez widżet Qt, Qt5 i QtQuick2 z technologią QML oraz możliwość osadzania JavaScript i HTML5 w Twojej aplikacji, zapewniają Ci nowoczesny wygląd podobny do sieci, jeśli zdecydujesz się to zrobić.

Dlaczego więc nie lubię Pythona w aplikacjach komputerowych i wolę przechowywać go w skryptach lub po stronie serwera?

  • Python trochę zrywa z radością międzyplatformową, twój klient musi zainstalować Pythona, aby uruchomić twoją aplikację (szczególnie w systemie Windows), a różne wersje Pythona, które są na oficjalnej stronie internetowej pytona, powodują, że klient jest zdezorientowany, którą z nich pobrać / zainstalować .

  • Python exe , tworzenie większych aplikacji (pod względem wielkości).

  • Aplikacje Python, jedz więcej pamięci.

To osobisty punkt widzenia. System nadrzędny Qt, inteligentne wskaźniki, nie pozwoli ci strzelić sobie w stopę, ani w nogi, C ++ 11 da ci jeszcze więcej funkcji.

01walid
źródło
3
„Twój klient musi zainstalować Python, aby uruchomić aplikację” - możesz dystrybuować biblioteki DLL Pythona ze swoją aplikacją, użytkownik nie musi ręcznie instalować Pythona. Nie musisz używać py2exe ani innych twórców exe błędów (z mojego doświadczenia), zobacz Osadzanie Pythona , to tylko kilka linii kodu c ++, zastąp PyRun_SimpleString PyRun_SimpleFile, możesz łatwo skompilować go sam, co nie powinno generować kosztów ogólnych w rozmiar twojej aplikacji. „Aplikacje Python, jedz więcej pamięci”. - użyj Cython, aby zoptymalizować wymagające aplikacje pod względem pamięci.
Czarek Tomczak