Programming

Stamina.lib / K.API – kontrola wersji

W nowym K.API bardzo istotna jest skuteczna kontrola wersji, bo jak wiadomo różnice pomiędzy różnymi wydaniami bibliotek mogą prowadzić do (znacznych) niestabilności. Przydatna byłaby również możliwość zablokowania konkretnych wersji, w których występują znane nam już błędy. Typowym rozwiązaniem jest porównywanie wersji API programu i wtyczek. W tym wypadku jest jednak zupełnie niewystarczające.

Spójrzmy na przykład na wtyczkę kSound – wykorzystuje do działania tylko podstawowe elementy API. Jeżeli np. zostaną wprowadzone większe zmiany w API obsługi plików .dtb – podniesienie numeru wersji całego API spowoduje konieczność ponownej kompilacji i dystrybucji wtyczki. Można oczywiście zdefiniować i sprawdzać kilka wersji newralgicznych podsystemów, ale myślę, że najlepsze rozwiązanie zostało wbudowane w Stamina.lib.

Czytaj dalej »

Stamina.lib – podstawy

Od dłuższego już czasu pracuję nad biblioteką Stamina.lib – będącej z założenia zbiorem klas ułatwiających obiektowe pisanie w C++. Założenie trochę się rozrosło, bo obecnie jest tu bardzo przyjemna obsługa wątków, plików .dtb, obrazów, zaczątki obsługi okien (które były pisane trochę “na gorąco” i w swoim czasie będą musiały być przekonstruowane ;) ) i masa innych przyjemności. Czemu pisać kolejną tego typu bibliotekę? Dobre pytanie :) Myślę, że chociażby dlatego, bo nie mogłem do tej pory znaleźć takiej, która posiadałby wszystkie poszukiwane przeze mnie cechy. Większość nie ma wiele wspólnego z obiektowością (GLib), inne z kolei są przeszablonowane i miejscami mało wygodne (boost). Wszystkie za to łączy jedna cecha – praktycznie w ogóle nie stosują czystych interfejsów. Być może gdzieś tam istnieje dokładnie to czego szukam – niestety nie było mi się dane na to natknąć, ani specjalnie intensywnie nie szukałem… Stamina.lib jest już faktem, a rozwija się dzięki pracom przy nowy API Konnekta (którego bez s.l już skompilować się nie da…).
Biblioteka jest co prawda wciąż w trakcie tworzenia (a co za tym idzie permanentnej przebudowy), to pewne jej elementy wydają się już na tyle stabilne, że można o nich cokolwiek napisać. Ten wpis będzie ewidentnie dla C++Geeks, więc takowych zapraszam dalej – inni z ciekawości też mogą popatrzeć co się gotuje :) Czytaj dalej »

String pełen Staminy

Jak zapowiadałem wcześniej pochwalę się troszeczkę moim nowym tworem – grupą klas do obsługi tekstu w bibliotece Stamina.

Założenia były takie: szybka klasa silnie oparta o template’y, alokacja/dealokacja niezależna od biblioteki (słynny problem z plikami .dll), przeźroczysta obsługa kodowań 8 i 16 bitowych w jednym obiekcie, przeźroczysta konwersja pomiędzy kodowaniami 8 bitowymi (np. win-1250 < -> UTF8), teoretyczne przygotowanie do obsługi kodowań o zmiennej szerokości znaku, zestaw podstawowych funkcji do obsługi tekstu, optymalizacje pod kątem nie robienia kopii tekstu przy każdej okazji…
Czytaj dalej »

Obiekty automatyczne w C++

Potrzebowałem zrobić automatyczne zbieranie informacji o używanych elementach Stamina.Lib. Miało to polegać na tym, że wystarczy dołączyć nagłówek jakiegoś modułu, aby informacje o nim (konkretniej nazwa i wersja) pojawiły się na specjalnej liście (która później służy do porównywania zgodności wersji, blablabla blablabla)… Jako że sprawa nie jest tak prosta jak mogłoby się wydawać zajęło mi to chwilę czasu i przyniosło mnóstwo nowej wiedzy, którą za chwilę zamierzam się z Wami podzielić…
Czytaj dalej »