mingw vs msvc

0

Witam.
Piszę sobie całkiem obszerną aplikację do zarządzania firmą. Wybrałem bibliotekę QT, by w przyszłości móc ją zaoferować na inne systemy. Aplikacja korzysta z różnych bibliotek np. openssl, sqlite, sqlcipher, gsoap, i składa się z wtyczek, które mogą np. obsługiwać bazy danych klientów, łączyć się z bankiem, zarządzać fakturami.
Staram się pisać ją w sposób profesjonalny tj. stosować wszelkie dobre praktyki związane z programowaniem obiektowym, trzymać się wzorców projektowych, przejrzystości kodu itp.

Moje obawy dotyczą kompilatora jakiego powinienem użyć pod Windows programując w QT. Mianowicie nie wiem czy użyć MSVC 2010 czy gcc (MinGW). Aplikacja ma być później sprzedawana innym firmom i nie wiem czy gcc pod windows to będzie dobry wybór . . . Czy ktoś mógłby się wypowiedzieć, porównać ....

Dzięki z góry i pozdrawiam .

Wibowit
  • Rejestracja:około 20 lat
  • Ostatnio:około 3 godziny
2

Jeśli twój zleceniodawca (o ile jest) nie naciska na jakieś mocne integracje z flakami Windowsa to spokojnie można obejść się z GCC. Nie musisz przecież używać czegokolwiek Windows-only, żeby program działał dobrze. Jest przecież mnóstwo przenośnych programów o świetnej funkcjonalności, więc i twój może taki być.

ATSD:
Nie zastanawiałeś się nad wybraniem platformy Java (tzn niekoniecznie język Java, są też inne popularne języki na JVM)? Do aplikacji typowo biznesowych Java nadaje się dużo bardziej niż 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.
edytowany 1x, ostatnio: Wibowit
0

Nie ukrywam że kierowałem się szybkością działania i prostotą we wdrażaniu, bez instalowania czegokolwiek innego, tylko app + dllki. Chociaż nie ukrywam że wiele rzeczy miałbym podane na tacy, jak np. SOAP albo kryptografię...

ZJ
  • Rejestracja:około 14 lat
  • Ostatnio:około 12 lat
1

Czego dokładnie używasz z gsoap? Niektóre elementy są tylko pod GPL v2, co może utrudnić sprzedawanie twojej aplikacji różnym firmom (jak nie kupisz na to innej licencji). Dodatkowo mam nadzieje, że nie zaszalałeś z domową kryptografią (tzn. wszystko, co nie jest prostym wrapperem do zewnętrznej biblioteki, może być podatne na atak). Jeżeli twoja aplikacja kompiluje się na obydwu kompilatorach, to ja bym wybrał msvc, testując używając także gcc. Mimo bycia zwolennikiem Linuksa, to muszę przyznać, że Microsoft ma najlepsze narzędzia programistyczne do C++.

Poza tym, nie wiem czy akurat wydajność jest najważniejszą rzeczą w aplikacji biznesowej (szczególnie jeżeli większość pracy programu to czekanie na zewnętrzną bazę danych, czy nawet zewnętrzny serwer), zwróciłbym uwagę bardziej na bezpieczeństwo, dostępność bibliotek czy łatwość modyfikowania (ale na to już za późno). Zawsze trudne obliczeniowo zadania można oddelegować do własnoręcznie napisanej natywnej biblioteki.

0

Wtyczka obsługująca SOAP za pomocą gSOAP jest napisana na GPL (udostępniam kod samej wtyczki), także wykorzystuję bibliotekę legalnie... Co do kompilacji, to na msvc mam problem z sqlcipher, ale myślę że jakoś sobie poradzę. Co do aplikacji, zależy również na szybkości działania samego interfejsu użytkownika i minimalnego obciążenia kompa, dlatego boje się wszelkich jvm czy net frameworków . Chociaż ta kwestia tak naprawdę jeszcze nie jest całkiem zamknięta. . .

Azarien
  • Rejestracja:ponad 21 lat
  • Ostatnio:około 3 godziny
0

Mianowicie nie wiem czy użyć MSVC 2010 czy gcc (MinGW).
Od strony technicznej na jedno wychodzi.
Bardziej się zastanów nad IDE: czy wolisz Visual Studio, czy Qt Creator? Bo do tego różnica się właściwie sprowadza.

Qt Creator ma lepszą integrację z Qt (co zrozumiałe), ale to środowisko jest… inne, co nie każdemu się podoba.

Jeśli jednak piszesz w Notatniku i odpalasz make, to i ta różnica tobie znika..

edytowany 1x, ostatnio: Azarien
0

Korzystam z QtCreator.

ZJ
  • Rejestracja:około 14 lat
  • Ostatnio:około 12 lat
0

Wątpię czy możesz używać pluginu GPL w programie nie GPL bez wyjątku w licencji, a nie możesz tego wyjątku dodać, ze względu na licencję gSOAP. Gdyby to było możliwe, to GPL nie miałoby za dużego sensu, bo każdą bibliotekę można by użyć jako plugin.

JVM, czy .net poza uruchomieniem nie są takie wolne. W przypadku aplikacji biznesowej nie masz dużego obciążenia procesora i aplikacja napisana powiedzmy w C# będzie pod względem szybkości nierozróżnialna od tej napisanej w C++. C++ ma swoje miejsce trochę niżej w hierarchii abstrakcji, twój program nie będzie działał na farmie serwerowej, gdzie dwukrotna różnica szybkości może spowodować duże oszczędności, lub na komórce, tylko na normalnym komputerze, która przez 95 % czasu nie będzie nic robi. Jak gdzieś będzie problem z wydajnością, to prędzej na IO.

Wibowit
  • Rejestracja:około 20 lat
  • Ostatnio:około 3 godziny
0

GPL wymaga, żeby cały program był wydany na GPL.
LGPL wymaga tego samego, chyba, że dołączymy program LGPLowy jako wtyczkę (czyli coś co można dowolnie podmienić już w wersji skompilowanej programu) i opublikujemy wszelkie zmiany do kodu LGPLowego.

W przypadku gSOAP jednak jest więcej opcji niż GPL albo licencja płatna:

The gSOAP Public License
The gSOAP Public License 1.3 is based on MPL1.1 (Mozilla Public License 1.1).

The license allows for commercial and non-commercial use of limited parts of gSOAP without fees or royalties. It also allows products to be built on top and distributed under any license (including commercial). Products developed with gSOAP should include a notice of copyright and a disclaimer of warranty in the product's documentation (License Exhibit B).

The gSOAP public license requires modifications that are distributed as part of an open source product based on gSOAP to be submitted back to us.

Note that the soapcpp2 and wsdl2h tools, UDDI code, Web server, and sample applications are NOT covered by the gSOAP public license. These are offered under a choice of GPL or commercial licensing.

A Java raczej nie stworzy żadnych problemów. Nawet ktoś z kontem gościa może sobie zainstalować Javę na komputerze (jestem prawie pewien, że .NETa nie da się tak zainstalować) i odpalić program Javowy.

Jeśli program stałby się hitem i zacząłbyś go masowo sprzedawać to mógłbyś się nawet wtedy pokusić o licencję na http://www.excelsior-usa.com/store/jet.html który kompiluje Javowe programy do samodzielnych exeków i pakuje je w instalatory. Ale myślę, że to raczej nie będzie potrzebne.


"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
0

Jednak będę się upierał przy tym, że projektując wtyczkę w odpowiedni sposób, mogę uniknąć publikowania kodu głównej aplikacji. . . Zresztą pisze o tym na stronie www.gnu.org .

Wibowit
  • Rejestracja:około 20 lat
  • Ostatnio:około 3 godziny
0

A jakiś konkret, wycinek z licencji?


"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.
Wibowit
  • Rejestracja:około 20 lat
  • Ostatnio:około 3 godziny
0

Wypas. W takim razie będziesz musiał skonstruować sobie protokół do IPC (inter process communication) żeby komunikować się z gSOAPem, a SOAP sam w sobie jest pewną formą IPC.

Zamiast kopać się z takimi pierdołami wybierz Javę i jakieś libki na niewirusowych licencjach.

If the program dynamically links plug-ins, but the communication between them is limited to invoking the ‘main’ function of the plug-in with some options and waiting for it to return, that is a borderline case.

Borderline case czyli dozwolone czy nie?

Using shared memory to communicate with complex data structures is pretty much equivalent to dynamic linking.

A więc zostaje chyba tylko wymiana wiadomości (jak np w MPI) pomiędzy programami, choć w sumie nawet tego nie jestem pewien.


"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
0

Mam zamiar wykorzystać zwykłego pipe'a, którego tylko zaszyfruję. I mam nadzieję, że to wystarczy ... Przesiadka na Jave, czy C# mi się nie uśmiecha, bo dość dużo już napisałem, a wiem że np. w C# taki SOAP to 2 kliknięcia myszką.

Wibowit
  • Rejestracja:około 20 lat
  • Ostatnio:około 3 godziny
1

Dużo czyli ile? Nawet jak przewidujesz, że jesteś w połowie, to warto się przesiąść na Javę, bo zwykle programiści są zbyt optymistyczni, jeśli chodzi o własne możliwości. A pisanie aplikacji typowo biznesowych w C++ to masochizm, żeby nie powiedzieć głupota.


"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.
several
  • Rejestracja:prawie 16 lat
  • Ostatnio:około godziny
0
Wibowit napisał(a)

A pisanie aplikacji typowo biznesowych w C++ to masochizm, żeby nie powiedzieć głupota.

Autor pisze w Qt, a nie w samym C++. Jeśli nie pisałeś nigdy nic z użyciem tego frameworka nie pisz, że jego użycie do głupota. Pisząc desktopa (obojętnie czy to aplikacja biznesowa czy jakaś inna aplikacja dedykowana) szybciej wybiorę Qt niż javę. Sam interfejs tworzy się dużo szybciej niż w swingu no i mechanizm sygnałów i slotów daje więcej swobody. Teraz możecie mnie hejtować....

@topic
To raczej nie ma znaczenia. Mingw generuje więcej wynikowego kodu ale pewnie i tak będziesz binarki czymś kompresował więc doesn't matter.

(edit literówki)


edytowany 3x, ostatnio: several
Wibowit
  • Rejestracja:około 20 lat
  • Ostatnio:około 3 godziny
0

Sam interfejs tworzy się dużo szybciej niż w swingu

Tzn szybciej niż metodą wyklikiwania GUI?

no i mechanizm sygnałów i slotów daje więcej swobody

Więcej swobody niż co? Że niby do Javy nie ma podobnych rozwiązań (nie wiem dokładnie na czym polega ten mechanizm sygnałów i slotów i jakie ma zastosowania, więc jak na razie nie mam do czego przyrównać, ale np akka.io załatwia sprawę komunikacji na wiele sposobów).


"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.
several
  • Rejestracja:prawie 16 lat
  • Ostatnio:około godziny
0
Wibowit napisał(a)

Sam interfejs tworzy się dużo szybciej niż w swingu

Tzn szybciej niż metodą wyklikiwania GUI?
</qoute>

Dobrze, to niech będzie że akurat mi szybciej klika się w narzędziach Qt.

Wibowit napisał(a)

no i mechanizm sygnałów i slotów daje więcej swobody

Więcej swobody niż co? Że niby do Javy nie ma podobnych rozwiązań (nie wiem dokładnie na czym polega ten mechanizm sygnałów i slotów i jakie ma zastosowania, więc jak na razie nie mam do czego przyrównać, ale np akka.io załatwia sprawę komunikacji na wiele sposobów).

Więcej swobody niż implementowanie wirtualnych metod (onPushButtonClicked). Sygnały i sloty to mechanizm, który w prosty sposób pozwala podłączyć jakikolwiek event do jakiejkolwiek metody (oznaczonej jako slot), sygnał (event) można podłączać do kilku slotów, kilka sygnałów do jednego slota, sygnał mogę zestawić do innego sygnału, mogę tworzyć własne sygnały i robić inne cuda jakie tylko przyjdą mi do głowy.


edytowany 1x, ostatnio: several
Shalom
  • Rejestracja:ponad 21 lat
  • Ostatnio:około 3 lata
  • Lokalizacja:Space: the final frontier
  • Postów:26433
0

@several ale w Javie mozesz zrobić dokładnie to samo. Różnica jest w ilosci kodu, ale wynika to tylko z tego że QtCreator/QtDesigner sporą cześć informacji generuje sam, albo zapisuje w xmlu. W przypadku Swinga masz wszystko w javowym kodzie ;)


"Nie brookliński most, ale przemienić w jasny, nowy dzień najsmutniejszą noc - to jest dopiero coś!"
several
W javie można robić sporo fajnych rzeczy, niedawno użyłem jej do małej aplikacji JXTA, wygodnie zaimplementowana i dobrze udokumentowana. Ale desktopy z gui to ja jednak wolę w Qt robić, wszystko co potrzeba pod ręką i genialna dokumentacja.
MasterBLB
  • Rejestracja:około 19 lat
  • Ostatnio:około 12 godzin
  • Lokalizacja:Warszawa
  • Postów:1454
0

@Shalom
W Qt też masz całe wyklikane w Designerze GUI w postaci kodu C++ kiedy przychodzi do kompilacji.MOC na podstawie XMLa Designera generuje klasę-pojemnik mającą metodę setupUi(QWidget*),w której to metodzie tworzone i pozycjonowane są wszelakie kontrolki z zaprojektowanej formatki,układane są w layoutach itd.Nie ma potem potrzeby grzebania się w tej funkcji samemu.


"Sugeruję wyobrazić sobie Słońce widziane z orbity Merkurego, a następnie dupę tej wielkości. W takiej właśnie dupie specjalista ma teksty o wspaniałej atmosferze, pracy pełnej wyzwań i tworzeniu innowacyjnych rozwiązań. Pracuje się po to, żeby zarabiać, a z resztą specjalista sobie poradzi we własnym zakresie, nawet jeśli firma mieści się w okopie na granicy obu Korei."
-somekind,
konkretny człowiek-konkretny przekaz :]
WR
  • Rejestracja:około 13 lat
  • Ostatnio:prawie 13 lat
  • Postów:8
0

Jeżeli chodzi ogólnie o kompilatory to ja polecę... DMC! Jest dużo szybszy od GCC(co do generacji kodu), dużo świeższy(mniej więcej tak jak LLVM)


"You had ones? Lucky bastard! All we got were zeros."
-Joel Spolsky
Zobacz pozostały 1 komentarz
WR
Chodzi mi o prędkość kompilacji.
Wibowit
No właśnie. Bo przecież GCC ma różne poziomy optymalizacji i wpływają one na prędkość kompilacji.
WR
Nie wiedziałem. Dzięki. Ale zapewne DMC kompiluje szybciej - wszyscy znamy "plotki" o dawno nie refaktoryzowanym kodzie GCC... Jeżeli chodzi o kompilatory C to ja korzystam z TCC ;)
Wibowit
Jeśli aplikacja ma działać 2x wolniej przez zlamione optymalizacje to po co używać wtedy C++, skoro nawet Java da lepszą wydajność, a kompilacja .java do .class jest praktycznie natychmiastowa w porównaniu do kompilacji .cpp do binarki?
WR
Nie wiem, nie korzystam z Javy ani C#, benchmarków też nie robię. Piszę w C i mi pasuje ;) A poza tym TCC może "wykonywać" src od razu bez kompilacji.
vpiotr
  • Rejestracja:prawie 14 lat
  • Ostatnio:prawie 3 lata
0
  1. Jeśli ma być aplikacja pod Windows to lepiej VC++
  • szybsza binarka (w czasie run-time, nie kompilacja)
  • bezpośrednie wsparcie dla interfejsów systemowych (nieprawdą jest że można się bez nich obyć - napisanie
    zwykłego demona MUSI korzystać z API, podobnie "schowek", uprawnienia użytkownika, zarządzanie procesami...)
  1. Kod na licencji GPL wykluczyłbym z projektu, chyba że chcesz go publikować jako źródła.
    Lepiej wybieraj LGPL, a najlepiej BSD / MIT / Public Domain.

  2. SOAP to zdaje się śpiew przeszłości. Do wyboru masz wiele innych rozwiązań:

  • Boost.interprocess
  • POCO
  • PION
  • serwis HTTP / REST / JSON (np. Mongoose)
    i pewnie jeszcze pare innych.
  1. Aplikacje biznesowe (baza danych, formatki, diagramy, raporty) tzw. "mainstream" robi w Java / C#.
    Ale to nie znaczy że się nie da w C++/Qt czy innym narzędziu (np. C++/wxWidgets, wxPython, Delphi).
    Szybkość tu raczej nie ma znaczenia - chyba że komunikujesz się ze światem zewnętrznym i opóźnienia
    liczone w ms mają znaczenie. A nawet wtedy możesz napisać jeden moduł w C++ a resztę w języku z bardziej
    ludzką twarzą - C#, Java, Python.

Ja osobiście do aplikacji biznesowych wykorzystuje COBOL, więc dla mnie każdy z ww języków jest lepszy :)

Zobacz pozostałe 6 komentarzy
vpiotr
@Wibowit, nie gadaj, chcesz mnie dobić? ;)
WR
@vpiotr ale asembler nie jest trudny ;) A i zawsze mamy makra ^^
Wibowit
Przy wystarczająco sprytnym asemblerze i dobrze zrobionych makrach można chyba nawet w dość ludzki sposób używać wirtualnego dziedziczenia. Trzeba ręcznie bawić się wskaźnikami do vtable, ale generalnie działa :) Mogę się mylić oczywiście, ale coś takiego kojarzę z obsługi COM (Component Object Model chyba) z Windowsa.
vpiotr
@White_Rabbit: a kto powiedział że nie znam assemblera(ów)?
WR
@vpiotr ja na pewno nie ;)
0

Dzięki za wypowiedź. Jeśli chodzi o SOAP to muszę z niego skorzystać, bo bank, z którym mam się komunikować udostępnia api tylko w tym protokole...

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.