Każdy kto kiedykolwiek próbował napisać jakiś program, zwłaszcza trochę większy niż „Hello, World!” wie jak bardzo żmudne jest to zadanie. Przynosi oczywiście też dużo satysfakcji, zwłaszcza gdy pracujemy nad główną funkcjonalnością tworzonego oprogramowania, jednak wszystkie szczegóły, na które trzeba zwracać uwagę i rzeczy, potrzebne ale nieciekawe, potrafią zniechęcić. Czasem aby zrobić z pozoru prostą rzecz trzeba wywołać wiele funkcji systemu operacyjnego i do tego przygotować dla nich odpowiednie dane. To wszystko trwa i jest podatne na błędy. Nie bez powodu programy powstają latami i nawet duże firmy zaliczają wpadki zarówno z terminami jak i jakością produktów.
W wypadku naszych platform jest podobnie, od zapowiedzi do realizacji mijają lata, a ze względu na niewielką ilość programistów, nawet tych zapowiedzi jest niewiele. Jednym z sposobów eliminacji tego problemu jest dostarczenie programistom rozwią­zania, które przyspieszy ich pracę i zachęci do tworzenia oprogramowania na systemy amigowe.
Dla innych platform istnieją frameworki pozwalające w prosty i szybki sposób tworzyć aplikacje, dostarczają standardowe funkcjonalności i ułatwiają budowę nowych.
API2 jest właśnie takim rozwiązaniem dla systemów amigowych.

Komponenty

System operacyjny AmigaOS (i kompatybilne) dostarczają w standardowych bibliotekach funkcji umożliwiających realizację określonych zadań przez program, na przykład otwarcie okna, dodanie do niego guzika, odczyt pliku z dysku itd. Aby jednak zaprogramować dany element, przeważnie, należy wywołać nie jedną z nich ale kilka, a także przygotować odpowiednie dane dla każdej. Powoduje to, że uzyskanie danej funkcjonalności wymaga czasu i jest podatne na błędy.
API2 podchodzi inaczej do tej kwestii. Większość funkcjonalności dostarczanej przez ten framework jest realizowana w postaci komponentów. Komponent realizuje pewną zamkniętą całość, która jest typowym elementem występującym w programie. Na przykład komponent okna, nie tylko je tworzy, ale także kontroluje czy jest ono widoczne czy nie, pobiera zdarzenia z systemu takie jak ruchy myszy czy wciskane klawisze, rozsyła je do innych komponentów które są do niego dodane na przykład przycisków itd. Dzięki takiemu podejściu to co dawniej zajmowało wiele linijek kodu, tutaj zamyka się w jednej. Tworzymy obiekt będący komponentem okno, a framework robi resztę za nas. Podejście to ma także dodatkowe zalety. Zoptymalizowanie i pozbawienie błędów danego komponentu powoduje, że każda aplikacja, która z niego korzysta działa szybciej, zużywa mniej pamięci i ma mniej błędów. Na poprzedniej stronie znajduje się program otwierający okno z przyciskiem.
A oto wynik jego działania

Nie tylko GUI

Program to nie tylko interfejs użytkownika. Wiele elementów, które nie są widoczne na ekranie, jest również wspólnych dla różnych aplikacji. API2 i w tym miejscu ułatwia zadanie programistom dostarczając komponentów do przechowywania i przetwarzania danych, obsługi tekstów, dat. W przyszłości również obsługi plików, serializacji i deserializacji obiektów, zarządzania dokumentami w tym operacji undo/redo itd. Mając do dyspozycji tak szeroką gamę gotowych elementów programista będzie mógł skupić się tylko i wyłącznie na funkcjonalności pisanej aplikacji całą resztę będzie miał gotową.

Łatwość użycia

Jednym z bardziej istotnych celów projektu API2 było stworzenie rozwiązania prostego w użyciu. Wyeliminowane zostały niedogodności BOOPSI (mechanizmu obiektowego wbudowanego w systemy amigowe) takie jak konieczność ręcznego tworzenia identyfikatorów, potrzeba użycia dispatchera, a dodatkowo została dodana kontrola typów do wywołań metod i własności. Używanie API2 nie wymaga też znajomości arytmetyki wskaźników co powoduje, że nawet początkujący programista nie będzie miał problemów z użyciem tego frameworka. Do obsługi sytuacji błędnych został wykorzystany mechanizm wyjątków, eliminujący sprawdzanie wyniku wykonanej operacji. Zarządzanie alokacją i dealokacją obiektów zostało oparte o liczenie referencji, co znacząco ułatwia eliminację wycieków pamięci i zwalnianie zasobów.

Nic nie przemawia tak dobrze jak przykład. Poniżej zamieszczone zostały dwa programy. Obydwa robią dokładnie to samo, gdy minie jedna sekunda wyświetlają napis „Time is up!”. Pierwszy jest napisany z użyciem API2, drugi wykorzystuje tylko standardowe funkcje AmigaOS.

Wersja używająca API2
Wersja bez API2

Kompatybilność

API2 powstawało od początku z myślą o wszystkich systemach amigowych, dlatego zapewnia kompatybilność między nimi na poziomie źródeł programów. Jeżeli więc przekompilujemy program wykorzystujący tylko ten framework, na dowolny system będzie on nadal działał. Oczywiście nie każdy system udostępnia każdą funkcjonalność. W takiej sytuacji API2 będzie „udawać” jakby była ona dostępna poprzez na przykład zwrócenie domyślnej wartości lub innej informacji pozwalającej programowi prawidłowo dalej działać.
Inną kwestią jest ograniczenie zasobów i prędkość procesora. Zostało włożone bardzo dużo wysiłku w optymalizację również tych aspektów, tak aby nawet na komputerach wolniejszych i z mniejszą ilością pamięci API2 dobrze sobie radziło.

Sytuacja systemów amigowych

Główną motywacją do stworzenia API2 była obecna sytuacja systemów amigowych. Brakuje na nich oprogramowania, w środowisku jest niewielu programistów, a część z nich nie jest aktywna ponieważ zniechęca ich ilość trudu, który należy włożyć w napisanie programu dla systemów amigowych w porównaniu do innych platform. To ostatnie utrudnia też przyciągnięcie ludzi z zewnątrz. API2 ma tą sytuację zmienić dostarczając rozwiązań na tym samym poziomie, na którym są dostępne na inne platformy. Ponadto redukując czas potrzebny na napisanie programu zwiększa możliwości tych programistów, którzy nadal są aktywni.

Stan prac

Framework składa się z wielu elementów, które tworzą hierarchię. Na samym dole znajduje się funkcjonalność odpowiedzialna za tworzenie komponentów i ich użycie, ta część jest w pełni gotowa. Następnie mamy podstawowe komponenty, na których oparte są pozostałe lub są przez nie wykorzystywane; część z nich jest ukończona, część wymaga dalszych prac. Kolejna warstwa to interfejs użytkownika i inne zaawansowane elementy. Ta część wymaga jeszcze najwięcej pracy. Obecnie jest rozwijany komponent do edycji tekstu WYSIWYG. Będzie on umożliwiał typowe operacje związane z wprowadzaniem i edycją, a także zmianę koloru czcionki i tła, różne czcionki w jednym dokumencie oraz wstawianie obrazków w treść.

Wsparcie

Aby prace przebiegały sprawnie i szybko, a czas między kolejnymi wydaniami był mierzony w miesiącach, a nie latach, co najmniej jedna osoba musi pracować nad tym projektem na pełen etat. By było to możliwe potrzebne jest finansowanie, które pokryje koszty pensji, ZUS-u i podatków. Jeżeli chcesz aby ten projekt się rozwijał wesprzyj go na Patreonie:
https://www.patreon.com/trifle

’Smith’ – Amiga NG (7) 2/2019

— do spisu artykułów

Dodaj komentarz