Post on 16-Jan-2016
description
Programowanie wieloplatformowe, Tomasz Mularczyk
Programowanie wieloplatformowe – przenośność kodu
2
Programowanie wieloplatformowe, Tomasz Mularczyk
Wstęp
• kiedyś programy pisane pod konkretną maszynę
• system operacyjny wszyty przez producenta
• bardziej uniwersalne platformy -> os niezależny
• wreszcie zlecanie zewnętrznym firmom pisania OSów
• MS-DOS (1981) rok na zlecenie IBM (przystosowanie 86-QDOSa)
• niedługo później PC-DOS (IBM) oraz DR-DOS (Digital Research)
• sukces PC nie był pewny, MS-DOS miał być raczej niszowym produktem,
• tymczasem w 1991 w USA było 50 mln kopii
• Windows 1.0 – 1984
• Windows 3.0 – 1990
– dziesięć lat po DOSie – Linux (dziecko Linusa Torvaldsa), na podobieństwo Unixa, który powstał w 1969 r.
3
Programowanie wieloplatformowe, Tomasz Mularczyk
Wstęp, cd.
• – Potrzeba przenoszenia progów między nimi.
• – Systemy stworzone do różnych zadań nie wymagają tego, natomiast systemy
• ogólnego zastosowania jak Windows XP czy Linux tak
• – czemu nie wymieniać najlepszych aplikacji
• – praktyka pokazuje, że nie jest to takie łatwe
• – na razie wybór OS rzutuje na programy
• – część firm sprzedaje różne wersje na różne OSy
• – np. Płatnik nie :)
• powody :
• – lekceważenie grup użytkowników najczęściej związanych z darmowym softem
• – faworyzowanie monopolisóów
• – brak fachowej wiedzy
• A DZIŚ DO DYSPOZYCJI MAMY SPORO DOBRYCH I DARMOWYCH NARZĘDZI!
4
Programowanie wieloplatformowe, Tomasz Mularczyk
Przenoszenie kodu – problemy
• – nawet funkcje standardowe nie gwarantują przeniesienia
• – różne wyniki lub brak startu na innym OSie
• – Opiszę na C++
• – STL (standard template library) rozbudowane, wymagana dobra wydajność
• – duży nakład pracy, aby twórcy kompilatora zaimplementowali
• – nawet najwięksi twórcy IDE do C++ - MS, Borland rezygnują z części funkcji
• – czasem istnieją, ale robią co innego (obsługa szablonów w VC++ 6.0)
• różnica między sztandarowymi komp. Win – VC++ i Lin – gcc jest bardzo długa (obsługa plików nagłówkowych, rozwijanie funkcji inline, szablony etc.)
5
Programowanie wieloplatformowe, Tomasz Mularczyk
Wyniki testu kompatybilności
• Wyniki przeprowadzonego testu kompatybilności ze standardem:
• % zgodności nazwa kompilatora
• 99+ Microsoft VC++ V7 (.NET), included library supplied by Dinkumware
• 97 Microsoft VC++ V6, added Dinkum C++ Library for VC++ V3.08
• 93 Metrowerks CodeWarrior for Windows V8.0, included library
• 89 Sun Forte Developer 7 C++ V5.4, included STLport library (optional)
• 88 Borland C++Builder V6, included STLport library (default)
• 86 GCC V3.2, included LibStdC++ library
• 84 Microsoft VC++ V6, included library supplied by Dinkumware
• 80 Sun Forte Developer 7 C++ V5.4, included RogueWave library (default)
• 77 Borland C++Builder V6, included RogueWave library (optional)
6
Programowanie wieloplatformowe, Tomasz Mularczyk
Inne różnice między kompilatorami C++
• - poza zgodnością różnice w wydajności
• - przydział pamięci pod gcc szybciej o rząd wielkości niż w VC++
• - gcc nie monitoruje tak skrupulatnie pamięci
• - 1 s na Linux, 8 s na Windows
• - typowy wpływ to ok . 20% czasu programu
• - szybka grafika 3d lepsza pod Windows
7
Programowanie wieloplatformowe, Tomasz Mularczyk
Narzędzia i biblioteki ułatwiające przenoszenie kodu
Języki zaprojektowane jako przenośne – m.in. Java
– maszyna wirtualna, której funkcje są zaimplementowane niezależnie dla każdego OSu
– bardzo wolna, o ile nie wykorzystuje się instrukcji udostępnianych przez konkretny OS lub
procesor – a wtedy strata przenośności
– minus – trzeba zainstalować MW javy, więc nasz program ma wymagania co do bibliotek
nieobecnych w systemie.
– Czasem programy zachowują się inaczej na różnych wersjach MW lub wymagają
dodatkowych bibliotek
– Może kiedyś będzie szybka, na razie za uniwersalność płacimy spadkiem wydajności
Jest mimo to całkiem dobrym pomysłem
8
Programowanie wieloplatformowe, Tomasz Mularczyk
Narzędzia i biblioteki ułatwiające przenoszenie kodu, cd.
biblioteki do znanych języków oprogramowania:
wxWindows (C++, Python, Basic i inne)
QT (C++)
9
Programowanie wieloplatformowe, Tomasz Mularczyk
wxWindows – wprowadzenie
– wxWindows jest zbiorem bibliotek
– całość zaprojektowana jako system klas (łatwo rozwijać funkcjonalność poprzez
dziedziczenie, łatwo modyfikować już istniejące klasy)
– po 1 bibliotece na każdy interfejs użytkownika (windows, GTK+, Motif, Mac)
– udostępnia pełne API w C++ oraz ograniczone w kilku innych językach - Python, Basic
– praca na plikach
– obsługa sieci, w tym socketów
– obsługa wątków
10
Programowanie wieloplatformowe, Tomasz Mularczyk
wxWindows – wprowadzenie
– zawiera podstawowe struktury danych – string (łańcuchy), tablice, listy, tablice haszujące
– wbudowana obsługa html- a (prosta w użyciu)
– wirtualne systemy plików
– obsługa OpenGL
– duże rozposzechnienie, łatwy dostęp do pomocy i innych zasobów (>20k stron www)
– łatwy do nauczenia (wszystko jest pod ręką - przykłady, sensowny podział na klasy)
– dobrze współpracuje z innymi technologiami specyficznymi dla platformy (np. z MFC w Windowsach)
11
Programowanie wieloplatformowe, Tomasz Mularczyk
wxWindows – wprowadzenie
– obsługa drukowania
– zintegrowany z systemem debugger (specjalna klasa komunikująca się z innymi)
– wsparcie dla Unicode
– minusy:
- nie pozwala na obsługę wyjątków w ramach swoich klas
- nie ma szablonów (tylko klasę pseudoszablonów), choć pozwala korzystać np. z szablonów STL
12
Programowanie wieloplatformowe, Tomasz Mularczyk
wxWindows – historia
Minimum historii wxWindows:1992 rok. Julian Smart ( pracując w Artificial Intelligence Applications Institute w University of Edinburgh) potrzebuje biblioteki, która działa w windows i na opartych na X uniksowych stacjach roboczych.
Istniejące rozwiązania są dla niego zbyt drogie. Pisze wxWindows
w – windows
x – uniksowy X
1996 – lekka stagnacja. Szybki rozwój technologii javowych. Pytanie, czy ktoś potrzebuje
bibliotek do C++ ? Dodatkowo kod był już mocno pogmatwany (wiele osób go tworzyło). Przepisać albo porzucić. Decyzja – pisać. Obsługa GTK+
1998 – port na Macitosha
2000 – dodanie wewnętrznej obsługi html-a
dziś – port na OS/2
13
Programowanie wieloplatformowe, Tomasz Mularczyk
wxWindows – interfejs
Ten sam kod dla wszystkich platform
wxWindows API
wxMSW wxX11
wxGTK wxMotif
wxMac wxBase
GDI Xlib/X11
GTK+ Motif Mac BEZ GUI
Windows
Unix(1) MacOS Windows
Unix(1)
MacOS
OS/2
14
Programowanie wieloplatformowe, Tomasz Mularczyk
wxWindows – klasy
Przykładowe klasy wxWindows:wszystkie dziedziczą z wxObject
– Związane z interfejsem graficznym :
wxBitmap, wxButton, wxBitmapButton, wxBrush, wxCheckBox, wxColour(rep. Kolorów), wxComboBox, wxDC (Device Context – bezp. Operacje na oknach wzorowane na rozwiązaniu z Windows), wxFont, wxGrid (siatka do tabel), wxListBox, wxMenu, wxPoint, wxRect,wxDCClipper, ...
– Związane z plikami:
wxFile, wxFileStream, wxFFile (buforowany dostęp), wxFileSystem (ciekawa, pozwala na dostęp do własnego systemu plików niezależnego od OSu), ...
15
Programowanie wieloplatformowe, Tomasz Mularczyk
wxWindows – klasy, cd.
Przykładowe klasy wxWindows, część druga:
– Klasy wspomagające programowanie i algorytmy:
wxArray, wxArrayString,wxList, wxDatabase (reprezentacja bazy ODBC), wxMutex (wsparcie dla wielowątkowości), wxString, wxHashTable, ...
– Klasy różne:
wxWave (dźwięk), wxFileDialog (menu wybóru plików, katalogów) i setki innych
W sumie ponad 300 klas, 5000 funkcji, 1,3 MLN linijek kodu, wartość przedsięwzięcia w 2001 oceniana była przez niezależnych analityków na 41,000,000 $)
16
Programowanie wieloplatformowe, Tomasz Mularczyk
wxWindows – różne
Licencja:
– wiele różnych
– GPL, freeware, komercjalna
– dlatego też jest tak lubiany i popularny
Ciekawy pomysł z "wielkościowaniem" okna. Klasa wxSizer pozwala na podział ekranu na części funkcjonalne. Ułatwia przenoszenie, jeśli różne jednostki i wymiary ekranów na różnych platformach.
Podręcznik do wxWindows ma 1700 stron, dokumentacja jest rozprowadzana z programem.
STRONA WWW: www.wxwindows.org
17
Programowanie wieloplatformowe, Tomasz Mularczyk
QT – opis
QT: (produkt norweskiej firmy TrollTech)
– wxWindows nie jest jedyny
– QT jest bardzo popularny pod Linuksem
– 1550 $ najtańsza, 1-stanowiskowa wersja komercjalna
– wersje GPL dla Linuxa, Maca i innych, ale tylko na tworzenie darmowego softu
( niekomercyjna )
– również jest to system klas
– w przeciwieństwie do wxWindows, gdzie nie ma świetnych "wizardów", tutaj są
STRONA WWW: www.trolltech.com
18
Programowanie wieloplatformowe, Tomasz Mularczyk
QT – klasy
19
Programowanie wieloplatformowe, Tomasz Mularczyk
Aplikacje rozwinięte przy użyciu opisanych bibliotek
wxWindows:– StoryLines ( narzędzie do pisania scenariuszy, wygląda jak wave-editor + edytory okładek)– Audacity audio editor– Intuitive (mixer muzyki, wykorzystuje grafikę 3D)– HelpBlocks (edytor helpa, obsługa htmla)– Ground Control Station for Unmanned Planes, Geneva Aerospace– VULCAN - modelowanie 3D dla kopalni– cn3D – dla National Center for Biotechnology Information (USA), oglądanie sekwencji
nukleotydów, białek, a nawet całego genomu– Zeemo (wymiana plików p2p)– Flakarchiver - zarządznie archiwami, kompresja i dekompresjaKto jeszcze go używa:Lockheed-Martin, Netscape, Xerox, NASA, AMD, Intel Graphics Lab, Compaq, California Institute of Technology, REDSonic, ...
20
Programowanie wieloplatformowe, Tomasz Mularczyk
QT:
sporo ogólnodostępnych aplikacji pod Linuksem (firma centralnie się nimi nie chwali)
ponadto jest używana w:
– Boeing
– Canon
– Shell
– Sony
– NASA
– Pioneer
– IBM
– Siemens
Aplikacje rozwinięte przy użyciu opisanych bibliotek, cd.
21
Programowanie wieloplatformowe, Tomasz Mularczyk
PODSUMOWANIE
– Programowanie na kilka platform wcale nie jest trudne.
– Mamy w ręku przynajmniej 2 podejścia – biblioteki do znanych nam języków programowania
lub cały język prog.
– istnieją dobre narzędzia, warto od razu zaprojektować aplikację jako wielosystemową
– wielkie firmy korzystają już z proponowanych rozwiązań
Cały wykład ( slajdy, szerszy opis i w przyszłości opracowanie ) znajduje się w sieci na stronie www.mardo.prv.pl